Grand Central Dispatch (GCD)
Grand Central Dispatch (GCD) 是一種適用於 Apple 的 Mac OS X 和 iOS 作業系統的技術,它結合了對 C 語言的擴充套件、API 和執行時庫,使應用程式開發人員能夠識別要並行執行的程式碼段。與 OpenMP 類似,GCD 管理著執行緒的大部分細節。GCD 識別對 C 和 C++ 語言的擴充套件,稱為塊。塊只是一個自包含的工作單元。它由插入在一對花括號 { } 前面的插入符號 ˆ 指定。下面顯示了一個簡單的塊示例 -
{ ˆprintf("This is a block"); }
它透過將塊放置在排程佇列上安排塊在執行時執行。當它從佇列中刪除一個塊時,它會將該塊分配給它管理的執行緒池中的一個可用執行緒。GCD 識別兩種型別的排程佇列:序列和併發。放置在序列佇列上的塊按照 FIFO 順序刪除。一旦一個塊從佇列中刪除,它必須完成執行才能刪除另一個塊。每個程序都有自己的序列佇列(稱為主佇列)。開發人員可以建立其他特定於程序的序列佇列。序列佇列可用於確保多個任務的順序執行。放置在併發佇列上的塊也按 FIFO 順序刪除,但可以同時刪除多個塊,從而允許多個塊並行執行。有三個系統範圍的併發排程佇列,它們根據優先順序區分:低、預設和高。優先順序表示塊相對重要性的近似值。簡單來說,具有較高優先順序的塊應該放置在高優先順序排程佇列中。以下程式碼段說明了如何獲取預設優先順序的併發佇列,以及如何使用 dispatch_async() 函式將塊提交到佇列 -
dispatch_queue_t queue = dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch async(queue, ˆ{ printf("This is a block."); });
在內部,GCD 的執行緒池由 POSIX 執行緒組成。GCD 積極管理池,允許執行緒數量根據應用程式需求和系統容量增長和縮小。
廣告