1.GCD:開發(fā)者可以自定義隊(duì)列:串行或并行隊(duì)列。在自定義隊(duì)列中被調(diào)度的所有block最終都將被放入到系統(tǒng)的全局隊(duì)列中和線程池中。
2.NSOperation:可以通過重寫main或start方法來定義自己的operations。前者不需要開發(fā)者管理一些狀態(tài)屬性篮条。后者必須手動(dòng)管理操作的狀態(tài)。為了讓操作隊(duì)列能夠捕獲到操作的改變,需要講狀態(tài)的屬性以配合KVO的方式進(jìn)行實(shí)現(xiàn)俱笛。
操作隊(duì)列的性能比GCD要低一點(diǎn),不過大多數(shù)情況這點(diǎn)負(fù)面影響可以忽略不計(jì)传趾。
3.Run Loop直接配合任務(wù)的執(zhí)行迎膜,它提供了一種異步執(zhí)行代碼的機(jī)制。Run Loop可以運(yùn)行在不同的模式浆兰,每種模式都定義了一組事件磕仅,供Run Loop作出響應(yīng)珊豹。
4.除了確保互斥訪問榕订,還需要引入內(nèi)存屏障店茶,解決代碼無序執(zhí)行所帶來的問題
5.優(yōu)先級(jí)反轉(zhuǎn):高優(yōu)先級(jí)和低優(yōu)先級(jí)的任務(wù)之間共享資源時(shí),就有可能發(fā)生優(yōu)先級(jí)反轉(zhuǎn)劫恒。當(dāng)?shù)蛢?yōu)先級(jí)的任務(wù)獲得了共享資源的鎖時(shí)贩幻,該任務(wù)應(yīng)該迅速完成并釋放掉鎖,這樣高優(yōu)先級(jí)的任務(wù)就可以在沒有明顯延時(shí)的情況下繼續(xù)執(zhí)行两嘴。然而高優(yōu)先級(jí)任務(wù)會(huì)在低優(yōu)先級(jí)的任務(wù)持有鎖的期間被阻塞丛楚。如果這時(shí)候有一個(gè)中優(yōu)先級(jí)的任務(wù)(該任務(wù)不需要那個(gè)共享資源),那么它就有可能會(huì)搶占低優(yōu)先級(jí)任務(wù)而被執(zhí)行憔辫,因?yàn)榇藭r(shí)高優(yōu)先級(jí)是被阻塞的趣些,所以中優(yōu)先級(jí)任務(wù)時(shí)目前所有可運(yùn)行任務(wù)重優(yōu)先級(jí)最高的。此時(shí)中優(yōu)先級(jí)就會(huì)阻塞低優(yōu)先級(jí)任務(wù)贰您,倒置低優(yōu)先級(jí)任務(wù)不能釋放掉鎖坏平,這也就會(huì)引起高優(yōu)先級(jí)任務(wù)一直在等待鎖的釋放。
6安全模式:從主線程中提取要使用到的數(shù)據(jù)锦亦,并利用一個(gè)操作隊(duì)列在后臺(tái)處理相關(guān)的數(shù)據(jù)功茴,最后回到主隊(duì)列中來發(fā)送你在后臺(tái)隊(duì)列中得到的結(jié)果。