首先明确几个概念:
在GCD里,我们并不关心线程,只关心队列,虽然最终任务都在线程上完成,但是那都被GCD接管了,线程的创建和销毁都由GCD负责,我们只用管理好队列和任务
-
同步:完成需要做的任务后才会返回,进行下一任务。不具备开启新线程的能力,在哪个线程里添加同步任务到队列里,就会在哪个线程里完成,不管是添加到串行还是并行队列里:
小明(当前线程)在看书(当前任务),渴了需要烧水(新的任务),现在有两种做法:
1.自己去烧水,水烧开了喝完再回来看书(当前线程同步任务);
2.派小红去烧水(新的线程),水烧开了回来(同步任务)通知小明喝水(回到当前线程)。 -
异步:不会等待任务完成才返回,会立即返回。
小明在看书(当前线程),渴了需要烧水(新的任务),派小红(新的线程)去烧水(任务),小红(新的线程)布置热水器,返回(不等水开直接返回,异步)陪小明看书,水开了小红会知道,然后通知小明喝水(烧水的任务结果回到当前线程) -
串行队列:队列里的任务依次执行。
小明(串行队列)有两个任务,看书(任务1)和嘿嘿嘿(任务2),小红是有要求的人(产品经理),必须看完一本书才能嘿嘿嘿,两个任务有顺序,必须依次进行 -
并行队列:任务并发执行。
小明(并行队列)很牛逼,可以一心二用,可以同时看书和嘿嘿嘿,嘿嘿一下看一眼书,没啥顺序,也不知道是先嘿嘿完还是先看完书 -
全局队列:系统维护的并行队列,务就行了
-
主队列:系统维护的串行队列,所有的UI绘制任务都在这个队列里
PS:同步和异步说的是函数是不是立即返回,串行和并行说的是任务是不是按顺序执行
网友评论