DispatchQueue中的main和global

首頁在DispatchQueue中main隊列是串行隊列而global()隊列則是并行隊列,那么對于在他們中添加異步線程的執(zhí)行順序如何呢?

一、Main隊列中添加異步線程的執(zhí)行順序

在主隊列中添加異步線程

首先在主線程隊列中先添加一個異步線程然后讓當(dāng)前線程睡眠1秒,然后再在異步線程中再在主線程隊列中添加兩個異步線程,讓第二個異步線程先睡眠2秒再執(zhí)行,他們的輸出結(jié)果是:


上圖主線程隊列的輸出結(jié)果

結(jié)果分析:

首先main隊列是串行隊列,切記主隊列是串行隊列,所以首先會先睡眠1秒,然后執(zhí)行輸出后,才執(zhí)行第一個加入主隊列的異步任務(wù),所以先輸出3,再輸出2,最后輸出4??傊?,在串行隊列中,他們的執(zhí)行順序和他們加入隊列的順序有關(guān), 加入異步任務(wù)不會阻塞主線程也不會開辟新的線程,但是依舊串行。

二、global()隊列中添加異步線程的執(zhí)行順序

在全局隊列中添加異步線程

首先在全局隊列中先添加一個異步線程后當(dāng)前線程睡眠1秒,然后再該異步線程中再在全局隊列中添加兩個異步線程,讓第二個異步線程同樣先睡眠2秒再執(zhí)行,他們的輸出結(jié)果是:


上圖全局隊列的第一種輸出結(jié)果


上圖全局隊列的第二種輸出結(jié)果

結(jié)果分析:

global()隊列是異步隊列,那么在其中添加異步線程后就會立即執(zhí)行,所以才會出現(xiàn)上面兩種可能的結(jié)果。但是,最外面的當(dāng)前線程則是先睡眠1秒再執(zhí)行,里面添加的第二個異步線程則是先睡眠2秒執(zhí)行,所以才會出現(xiàn)上面的結(jié)果。所以,在異步隊列中異步線程的執(zhí)行和添加順序無關(guān)。

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

相關(guān)閱讀更多精彩內(nèi)容

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