dispatch_async & dispatch_sync

原文链接:http://www.cnblogs.com/zhuocheng/p/3596474.html


博客搬家咯~ http://joeleee.github.io/

博客搬家咯~ http://joeleee.github.io/

博客搬家咯~ http://joeleee.github.io/

 

Clear that!

 

dispatch_async 是将block发送到指定线程去执行,当前线程不会等待,会继续向下执行。

dispatch_sync 也是将block发送到指定的线程去执行,但是当前的线程会阻塞,等待block在指定线程执行完成后才会继续向下执行。

 

所以为什么 dispatch_sync 使用不当时,容易对当前线程造成死锁就容易分析了~

 

dispatch_sync 和 dispatch_async 将block加入到指定线程中后,指定线程都是串行执行的,既FIFO。 所以说 dispatch_sync(queue, ^{}); 这句代码还是有意义的~ 会阻塞当前线程等待queue中的所有任务执行完成后再向下执行。

 

不过暂时俺还没有碰到有必要使用 dispatch_sync 的地方, 看了网上说的 “数据库需要并发I/O的时候dispatch_sync” ,还是不大了解是什么个场景~ 期待大神点拨。。。

 

本文理解有误,看这里吧:http://joeleee.github.io/2017/02/21/%E6%89%92%E4%BA%86%E6%89%92libdispatch%E6%BA%90%E7%A0%81/

 

转载于:https://www.cnblogs.com/zhuocheng/p/3596474.html

上一篇:阿里、字节:一套高效的iOS面试题之多线程


下一篇:php – Magento:停止在pre_dispatch观察者中调度