dispatch_async & dispatch_sync


博客搬家咯~ 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

本站公眾號
   歡迎關注本站公眾號,獲取更多信息