同步函數(shù)&串行隊列
- 不會開啟線程,在當(dāng)前線程執(zhí)行任務(wù)
- 任務(wù)串行執(zhí)行吟秩,任務(wù)一個接著一個
- 會產(chǎn)生堵塞(死鎖咱扣,崩潰)
主隊列(串行隊列)加入同步任務(wù)堵塞的原因:
NSLog(@"aaa");
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"bbb");
});
NSLog(@"ccc");
- 任務(wù)A內(nèi)容為執(zhí)行B任務(wù)
- 串行隊列,所以B任務(wù)是在A任務(wù)之后加入隊列峰尝,需要等待任務(wù)A執(zhí)行完畢
- 同步任務(wù)偏窝,A任務(wù)的內(nèi)容B執(zhí)行完成,A任務(wù)才算完成
- 于是武学,因為串行祭往,B等待A,因為同步火窒,A等待B硼补,互相等待產(chǎn)生死鎖
同步函數(shù)&并發(fā)隊列
- 不會開啟線程,在當(dāng)前線程執(zhí)行任務(wù)
- 任務(wù)一個接著一個
異步函數(shù)&串行隊列
- 開啟新線程
- 任務(wù)一個接著一個
異步函數(shù)&并發(fā)隊列
- 開啟線程熏矿,在當(dāng)前線程執(zhí)行任務(wù)
- 任務(wù)異步執(zhí)行已骇,沒有順序,CPU調(diào)度有關(guān)
- 同步函數(shù)(sync)不開啟子線程
- 異步函數(shù)(async)開啟子線程
- 串行隊列(serial_queue)順序執(zhí)行
- 并行隊列(concurrent_queue)任務(wù)順序不確定