Clear that!
dispatch_async 是將block發(fā)送到指定線程去執(zhí)行,當(dāng)前線程不會等待,會繼續(xù)向下執(zhí)行。
dispatch_sync 也是將block發(fā)送到指定的線程去執(zhí)行,但是當(dāng)前的線程會阻塞,等待block在指定線程執(zhí)行完成后才會繼續(xù)向下執(zhí)行。
所以為什么 dispatch_sync 使用不當(dāng)時,容易對當(dāng)前線程造成死鎖就容易分析了~
dispatch_sync 和 dispatch_async 將block加入到指定線程中后,指定線程都是串行執(zhí)行的,既FIFO。 所以說 dispatch_sync(queue, ^{}); 這句代碼還是有意義的~ 會阻塞當(dāng)前線程等待queue中的所有任務(wù)執(zhí)行完成后再向下執(zhí)行。
不過暫時俺還沒有碰到有必要使用 dispatch_sync 的地方, 看了網(wǎng)上說的 “數(shù)據(jù)庫需要并發(fā)I/O的時候dispatch_sync” ,還是不大了解是什么個場景~ 期待大神點撥。。。
新聞熱點
疑難解答