同步函數(shù):只能在當(dāng)前線程中執(zhí)行任務(wù),不具備開啟新線程的能力
異步函數(shù):可以在新的線程中執(zhí)行任務(wù),具備開啟新線程的能力
并發(fā)隊(duì)列:可以讓多個任務(wù)并發(fā)執(zhí)行(自動開啟多個線程同時執(zhí)行任務(wù))
串行隊(duì)列:讓任務(wù)按照順序執(zhí)行。
并發(fā)隊(duì)列只能在異步函數(shù)中有效,沒有順序就是異步執(zhí)行有順序就是串行執(zhí)行。
異步函數(shù)+并發(fā)隊(duì)列:會開啟多條線程,任務(wù)并發(fā)執(zhí)行
異步函數(shù)+串行隊(duì)列:會開啟一條線程,任務(wù)串行執(zhí)行
同步函數(shù)+并發(fā)隊(duì)列:不會開啟新線程,任務(wù)串行執(zhí)行
同步函數(shù)+串行隊(duì)列:不會開啟新線程,任務(wù)串行執(zhí)行
結(jié)論:只要是同步函數(shù)不管是什么隊(duì)列都不會開啟線程任務(wù)串行執(zhí)行。
主線程中執(zhí)行同步與異步函數(shù)的情況:
異步函數(shù)+主隊(duì)列:不會開啟線程,所有任務(wù)在主線程中串行執(zhí)行。
同步函數(shù)+主隊(duì)列:死鎖 因?yàn)橹麝?duì)列的任務(wù)必須用主線程執(zhí)行 而主線程在執(zhí)行同步函數(shù)的任務(wù)時是串行的要等到執(zhí)行完這個任務(wù)以后才會去執(zhí)行隊(duì)列中的任務(wù) 造成死鎖。
主隊(duì)列特點(diǎn):如果主隊(duì)列發(fā)現(xiàn)當(dāng)前主線程有任務(wù)執(zhí)行會暫停調(diào)用隊(duì)列中的任務(wù)直到主線程空閑(主隊(duì)列任務(wù)執(zhí)行暫停 主線程完成不了主隊(duì)列的任務(wù) 死循環(huán))