GCD

2018-04-10  本文已影响0人  溜溜的小枫

三个概念:队列,线程,block块

关系:一个队列对应一个或者多个线程,一个线程对应一个或者多个block块

1 线程:一个CPU执行一组CPU命令列的路径就是线程。

    每一个dispatch_async或者dispatch_sync都是创建了一个线程并将队列添加到这个线程中(是否开辟新线程根据不同情况有不同注解《注解1》)

2 队列:这是gcd对线程的封装,是一个执行队列。(先进先出顺序)

    队列分为serial和concurrent两种队列,serial是同步队列,concurrent是异步队列。(无论是那种队列,都是先进先出,只是有是否等待的区别)

3 block块:他是具体的执行任务模块

注解1:

线程的分配是有系统根据不同创建函数以及不同的队列分配的,我们能干预,但是不能决定。

对于dispatch_sync函数,他是将子线程同步的加到当前线程中。如果是将serial队列添加到线程中,同一个serial队列的block在同一个线程,不同的serial队列的block也是在同一个线程中执行;如果是将concurrent队列添加到线程中,同一个concurrent队列的不同block在不同的线程中,不同的concurrent队列的相同或者不同block在不同的线程中。

对于dispatch_async函数,他是将子线程异步的加到当前线程中。如果是将serial队列添加到线程中,同一个serial队列的block在同一个线程,不同的serial队列的block不在同一个线程中执行;如果是将concurrent队列添加到线程中,同一个concurrent队列的不同block在不同的线程中,不同的concurrent队列的相同或者不同block在不同的线程中。

注解2:

dispatch_sync或者dispatch_async是一个函数,一个创建线程并将队列添加到线程中的函数。他的行为由注释1解释。他决定了当前线程和队列所在线程(根据注释1决定是否有新线程)的关系。(无论何种状况,第一次调用这些函数的时候是创建了新线程的)

队列决定了block与block之间的关系。

注释3:

dispatch_sync和dispatch_async的

实例理解:

下面的操作都是第一次执行

1    线程1中执行 dispatch_async() 是开辟一个线程2 并将queue加到这个线程2中,同时将线程2异步的加载到线程1中。

2    线程1中执行 dispatch_sync() 是开辟一个线程2 并将queue加到这个线程2中,同时将线程2同步的加载到线程1中。

3    线程1中执行 dispatch_sync() 开辟一个线程2。

      线程1中执行 dispatch_sync() 开辟一个线程3。(规定此次在必定开创新线程的情况下)

      dispatch_sync说明了线程2和线程1的关系。

      queue说明了线程2和线程3的关系

上一篇下一篇

猜你喜欢

热点阅读