关于GCD中阻塞的理解

队列:

存放任务的地方,可以理解为存放一段一段要执行的代码。

线程:

执行任务的流程。执行完A,接着执行B,然后再执行C。

任务的执行过程:

=====================================

同步派发必然会导致当前线程被阻塞住,和队列无关。派发函数必须等待任务完成才能返回。

  • 用同步函数往并发队列派发任务时:
    任务会当前线程执行

  • 用同步函数往串行队列派发任务时:
    只要调用派发函数时不是在同一串行队列中,就不会阻塞,任务会在当前线程一个一个串行执行,然后派发函数返回。

而异步派发函数比较神奇,不用等待任务完成就可直接返回,因此即使在串行队列中向同一队列异步派发任务,也不会造成死锁,因为派发函数直接就返回了,串行队列中靠后的任务就可以得以执行。至于并发队列,各个任务直接本来就是并发执行的,不存在谁等待谁完成的问题。

http://www.saitjr.com/ios/ios-gcd-deadlock.html

//www.greatytc.com/p/0b0d9b1f1f19

http://blog.jobbole.com/66866/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容