博客搬家咯~ http://joeleee.github.io/git
博客搬家咯~ http://joeleee.github.io/github
博客搬家咯~ http://joeleee.github.io/数据库
Clear that!并发
dispatch_async 是将block发送到指定线程去执行,当前线程不会等待,会继续向下执行。async
dispatch_sync 也是将block发送到指定的线程去执行,可是当前的线程会阻塞,等待block在指定线程执行完成后才会继续向下执行。spa
因此为何 dispatch_sync 使用不当时,容易对当前线程形成死锁就容易分析了~线程
dispatch_sync 和 dispatch_async 将block加入到指定线程中后,指定线程都是串行执行的,既FIFO。 因此说 dispatch_sync(queue, ^{}); 这句代码仍是有意义的~ 会阻塞当前线程等待queue中的全部任务执行完成后再向下执行。博客
不过暂时俺尚未碰到有必要使用 dispatch_sync 的地方, 看了网上说的 “数据库须要并发I/O的时候dispatch_sync” ,仍是不大了解是什么个场景~ 期待大神点拨。。。it
本文理解有误,看这里吧:http://joeleee.github.io/2017/02/21/%E6%89%92%E4%BA%86%E6%89%92libdispatch%E6%BA%90%E7%A0%81/io