iOS多線程排列組合(GCD)

DEMO地址

1. 串行隊(duì)列,同步執(zhí)行

示例代碼:

運(yùn)行結(jié)果:

結(jié)束可以看到是在主線程順序執(zhí)行的

2. 串行隊(duì)列,異步執(zhí)行

示例代碼:

運(yùn)行結(jié)果:

結(jié)論可以看到系統(tǒng)只開了一條線程,都是在線程3上執(zhí)行的,并且是順序執(zhí)行

3. 并發(fā)隊(duì)列,同步執(zhí)行

示例代碼:

運(yùn)行結(jié)果:

結(jié)論可以看到是在主線程上順序執(zhí)行的,跟第一種結(jié)論是一樣的, 由此可以看出,開不開線程是同步換是異步控制的

4. 并發(fā)隊(duì)列,異步執(zhí)行

示例代碼:

運(yùn)行結(jié)果:

結(jié)論看出開啟了多條線程并且是無序執(zhí)行的

5. 全局隊(duì)列,同步執(zhí)行

示例代碼:

運(yùn)行結(jié)果:

結(jié)論可以看出是在主線程上順序執(zhí)行的

6. 全局隊(duì)列,異步執(zhí)行

示例代碼:

運(yùn)行結(jié)果:

結(jié)論可以看出是開啟的多條線程,并且執(zhí)行的順序是混亂的,跟并發(fā)隊(duì)列異步執(zhí)行的結(jié)果是一樣的

7. 主隊(duì)列,同步執(zhí)行

示例代碼:

運(yùn)行結(jié)果:

結(jié)論可以看出來,發(fā)生"死鎖"了,卡死了,卡死的原因是循環(huán)等待,主隊(duì)列的東西要等主線程執(zhí)行完,而因?yàn)槭峭綀?zhí)行不能開線程,所以下面的任務(wù)要等上面的任務(wù)執(zhí)行完,所以卡死。這是排列組合中唯一一個(gè)會(huì)卡死的組合

8. 主隊(duì)列,異步執(zhí)行

示例代碼:

運(yùn)行結(jié)果:

結(jié)論可以看出來是在主線程順序執(zhí)行的

總結(jié):

1, 同步開線程,異步不開線程,開不開線程是由同步換是異步控制的!

2, 開幾條線程,取決于串行隊(duì)列換是并發(fā)隊(duì)列,串行隊(duì)列只開一條線程,并發(fā)隊(duì)列開多條線程(異步情況下)

3, 主隊(duì)列只能在主線程下執(zhí)行任務(wù),不能再其他線程上執(zhí)行!



DEMO地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容