進(jìn)程:
進(jìn)程是操作系統(tǒng)分配資源的基本單位,擁有獨(dú)立的內(nèi)存單元,一個(gè)進(jìn)程崩潰,不會對其他進(jìn)程造成影響。
線程:
線程是獨(dú)立運(yùn)行和對立調(diào)度的基本單位。線程是真正的執(zhí)行單元,負(fù)責(zé)代碼的執(zhí)行。一個(gè)進(jìn)程可以有一個(gè)或多個(gè)線程。線程和同一進(jìn)程下的其他線程共享進(jìn)程的資源,線程沒有獨(dú)立的地址空間,一個(gè)線程崩潰,整個(gè)進(jìn)程就會崩潰。
線程與隊(duì)列的關(guān)系:
隊(duì)列是保存和管理任務(wù),線程是在隊(duì)列中讀取任務(wù)執(zhí)行。可以說線程執(zhí)行隊(duì)列調(diào)度的任務(wù)。
為什么要在主線程刷新UI?
因?yàn)閁Ikit不是線程安全的,如果多線程同時(shí)刷新UI,會造成資源搶奪、讀寫問題、UI異常、崩潰等。
隊(duì)列:
隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),是一種特殊的線性表。
串行隊(duì)列:只開啟一個(gè)線程,每次只有一個(gè)任務(wù)可以執(zhí)行,一個(gè)任務(wù)執(zhí)行完畢才能執(zhí)行下一個(gè)任務(wù)。主隊(duì)列就是一種串行隊(duì)列,主隊(duì)列的任務(wù)在主線程執(zhí)行。
并發(fā)隊(duì)列:開啟多個(gè)線程,讓多個(gè)任務(wù)同時(shí)執(zhí)行。全局隊(duì)列是一種并發(fā)隊(duì)列。
任務(wù):
同步任務(wù):不具備開啟線程的能力。一個(gè)任務(wù)執(zhí)行完,才會執(zhí)行下一個(gè)任務(wù)。
異步任務(wù):具備開啟線程的能力,不會阻塞線程。
同步執(zhí)行 + 串行隊(duì)列:順序執(zhí)行
同步執(zhí)行 + 并發(fā)隊(duì)列:順序執(zhí)行
異步執(zhí)行 + 串行隊(duì)列:順序執(zhí)行
異步執(zhí)行 + 并發(fā)隊(duì)列:開啟多線程
同步執(zhí)行 + 主隊(duì)列:死鎖
異步執(zhí)行 + 主隊(duì)列:不會開啟多線程