
最近在回顧多線(xiàn)程,現(xiàn)將最近整理的關(guān)于GCD的筆記整理出來(lái),然后加上個(gè)人的見(jiàn)解。發(fā)布如下,如有錯(cuò)誤,望指出!
線(xiàn)程:線(xiàn)程就是一個(gè)需要管理執(zhí)行代碼的內(nèi)核級(jí)和應(yīng)用級(jí)數(shù)據(jù)結(jié)構(gòu)組合。內(nèi)核級(jí)結(jié)構(gòu)協(xié)助調(diào)度線(xiàn)程事件,并搶占式調(diào)度一個(gè)線(xiàn)程到可用的內(nèi)核之上。應(yīng)用級(jí)結(jié)構(gòu)包括用于存儲(chǔ)函數(shù)調(diào)用的調(diào)用堆棧和應(yīng)用程序需要管理和操作線(xiàn)程屬性和狀態(tài)的結(jié)構(gòu)。
多線(xiàn)程:多線(xiàn)程是一個(gè)比較輕量級(jí)的方法來(lái)實(shí)現(xiàn)單個(gè)應(yīng)用程序內(nèi)多個(gè)代碼執(zhí)行路徑。(多線(xiàn)程的底層實(shí)現(xiàn)機(jī)制是Mach的線(xiàn)程)
多線(xiàn)程的優(yōu)點(diǎn):
- 多個(gè)線(xiàn)程可以提高應(yīng)用程序的感知響應(yīng)。
- 多個(gè)線(xiàn)程可以提高應(yīng)用程序在多核系統(tǒng)上的實(shí)時(shí)性能。
多線(xiàn)程的缺點(diǎn):
- 應(yīng)用程序內(nèi)擁有多個(gè)可執(zhí)行路徑,會(huì)給你的代碼增加更多的復(fù)雜性。
- 每個(gè)線(xiàn)程需要和其他線(xiàn)程協(xié)調(diào)其行為,以防止它破壞應(yīng)用程序的狀態(tài)信息。因?yàn)閼?yīng)用程序內(nèi)的多個(gè)線(xiàn)程共享內(nèi)存空間,它們?cè)L問(wèn)相同的數(shù)據(jù)結(jié)構(gòu)。如果兩個(gè)線(xiàn)程試圖同時(shí)處理相同的數(shù)據(jù)結(jié)構(gòu),一個(gè)線(xiàn)程有可能覆蓋另外線(xiàn)程的改動(dòng)導(dǎo)致破壞該數(shù)據(jù)結(jié)構(gòu)。
線(xiàn)程狀態(tài):

相關(guān)術(shù)語(yǔ):
??同步(synchronous):不具備開(kāi)啟線(xiàn)程的功能,只能在當(dāng)前線(xiàn)程中執(zhí)行任務(wù)。同時(shí)具有阻塞當(dāng)前線(xiàn)程的作用,直到當(dāng)前任務(wù)執(zhí)行完畢。
??備注1:dispatch_sync 派發(fā)的block的執(zhí)行線(xiàn)程和 dispatch_sync 上下文線(xiàn)程是同一個(gè)線(xiàn)程;
??備注2:由于dispatch_sync需要等待block被執(zhí)行,這就非常容易發(fā)生死鎖。如果一個(gè)串行隊(duì)列,使用dispatch_sync提交block到自己隊(duì)列中,就會(huì)發(fā)生死鎖
????異步(asynchronous):具備開(kāi)啟線(xiàn)程的功能,不用等待當(dāng)前任務(wù)執(zhí)行完畢,就可執(zhí)行下個(gè)任務(wù)。
??備注:dispatch_async 派發(fā)的block的執(zhí)行線(xiàn)程和 dispatch_async 上下文線(xiàn)程不是同一個(gè)線(xiàn)程,主隊(duì)列 下異步任務(wù)還是在主隊(duì)列下執(zhí)行;
????并行隊(duì)列(Concurrent Dispatch Queue):可以讓多個(gè)任務(wù)并行(同時(shí))執(zhí)行(自動(dòng)開(kāi)啟多個(gè)線(xiàn)程同時(shí)執(zhí)行任務(wù))并行功能只有在異步(dispatch_async)函數(shù)下才有效.
??備注:并行隊(duì)列可以同時(shí)執(zhí)行多個(gè)任務(wù),系統(tǒng)會(huì)維護(hù)一個(gè)線(xiàn)程池來(lái)保證并行隊(duì)列的執(zhí)行。線(xiàn)程池會(huì)根據(jù)當(dāng)前任務(wù)量自行安排線(xiàn)程的數(shù)量,以確保任務(wù)盡快執(zhí)行。
??串行隊(duì)列(Serial Dispatch Queue):讓任務(wù)一個(gè)接著一個(gè)地執(zhí)行(一個(gè)任務(wù)執(zhí)行完畢后,再執(zhí)行下一個(gè)任務(wù))