- 0:摘自蘋果官方的說明:
Grand Central Dispatch(GCD)
是異步執(zhí)行任務的技術(shù)之一。還有一句更為給力的說明:開發(fā)者要做的只是定義想執(zhí)行的任務并追加到適當?shù)腄ispatch Queue中镰吆。
也就是像這樣:
dispatch_async(queue,^{
//something want to do
});
上述的源代碼使用Block語法“定義想執(zhí)行的任務”旦签,通過dispatch_async
函數(shù)“追加”賦值在變量queue的“Dispatch Queue中”。這樣就可以似的指定的Block在另外一條線程中執(zhí)行儡司。
- 1:
“Dispatch Queue”
意如其名--執(zhí)行處理的等待序列限匣。我們可以通過dispatch_async函數(shù)等API彤守,在Block語法中記述想執(zhí)行的處理并追加到Dispatch Queue中徙融。此隊列會按照追加的順序:FIFO執(zhí)行處理。
另:在執(zhí)行處理的時候存在兩種隊列:Serial Dispatch Queue(串行隊列)和Concurrent Dispatch Queue(并行隊列)瑰谜。 - 2:
Serial Dispatch Queue
:等待現(xiàn)在執(zhí)行中的處理結(jié)束方可順序執(zhí)行下一個欺冀。它使用的是一個線程。是一對一的關(guān)系萨脑。與Serial Dispatch Queue不同的是隐轩,Concurrent Dispatch Queue:不等待現(xiàn)在執(zhí)行中的處理結(jié)束,可以并行執(zhí)行多個處理渤早,但并行執(zhí)行的處理數(shù)量取決于當前系統(tǒng)的狀態(tài)职车。所謂“并行執(zhí)行”就是使用多個線程同時執(zhí)行多個處理。是一對多的關(guān)系鹊杖。Concurrent Dispatch Queue在執(zhí)行處理時悴灵,執(zhí)行順序會根據(jù)處理內(nèi)容和系統(tǒng)的狀態(tài)發(fā)生改變。并不能像Serial Dispatch Queue固定順序的執(zhí)行骂蓖。 - 3:至于系統(tǒng)當前使用的線程數(shù)积瞒,是由iOS和OSX的核心---XNU內(nèi)核決定的,并只生成所需的線程執(zhí)行處理登下。當處理結(jié)束茫孔,需要執(zhí)行的處理數(shù)量減少的時候,XNU內(nèi)核會結(jié)束不再需要的線程被芳。
- 4:通過GCD的API生成Dispatch Queue
dispatch_queue_create("queue",NULL)
.生成Serial Dispatch Queue缰贝。
dispatch_queue_create("queue",DISPATCH_QUEUE_CONCURRENT).
生成Concurrent Dispatch Queue。當然有創(chuàng)建就有管理畔濒,和OC的引用計數(shù)式內(nèi)存管理一樣剩晴,需要通過dispatch_retain 和 dispatch_release函數(shù)的引用計數(shù)來管理內(nèi)存。 - 5:直接獲取系統(tǒng)標準提供的Dispatch Queue
Main Dispatch Queue 在主線程執(zhí)行的dispatch queue侵状,為Serial Dispatch Queue李破。追加到Main Dispatch Queue的處理在主線程的RunLoop中執(zhí)行宠哄。
dispatch_queue_t mainQueue = dispatch_get_main_queue();
Global Dispatch Queue 是所有應用程序都能使用的Concurrent Dispatch Queue,對于這個隊列有四個優(yōu)先級嗤攻,在獲取的時候可以依據(jù)需要進行選擇毛嫉。
未完。妇菱。