串行并行异步同步的概念很容易让人混淆,关于这几个概念我在第一篇GCD中有解释,但是还不够清晰,所以这里重写一篇博客专门对这几个概念进行区分:

先说一下队列和任务:

(1)队列分为串行和并行,任务的执行分为同步和异步,异步是多线程的代名词,异步在实际引用中会开启新的线程,执行耗时操作。

(2)队列只是负责任务的调度,而不负责任务的执行,任务是在线程中执行。

以上两点对了解串行、并行、同步、异步非常重要!

再说一下队列和任务的特点:

(1)串行队列:任务按照顺序被调度,前一个任务不执行完毕,队列不会调度。

(2)并行队列:只要有空闲的线程,队列就会调度当前任务,交给线程去执行,不需要考虑前面是否有任务在执行,只要有线程可以利用,队列就会调度任务。

(3)任务同步执行:不会开启新的线程,任务按顺序执行。

(4)任务异步执行:会开启新的线程,任务可以并发的执行。

那么有人会问既然异步执行效率最高还要同步做什么呢,我举一个简单的例子:

    当两个或两个以上的线程共享某些资源或需要相互配合来完成某些工作时,就必须通过线程同步来协调各个线程运行的次序。 比如在线程A和B配合工作时,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。或者当线程A和B共享一个资源时,如果同一时间读写这个资源,就会发生资源竞争的问题,这时就只能允许某个时间点只有一个线程占有资源,另外一个线程等待,这也是线程同步