簡體   English   中英

GCD與自定義隊列

[英]GCD vs custom queue

我想知道兩者之間的性能差異是什么。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

    // perform complex operation

    // dispatch back to main thread to update UI

});



dispatch_async(_myCustomConcurrentQueue, ^{

    // perform complex operation

    // dispatch back to main thread to update UI

});

我的假設是GCD在OS和其他應用程序中使用,它將需要執行非常快速的后台任務並快速完成。 創建的自定義隊列與GCD是分開的,它們可以運行不同的任務,一旦釋放,它們將被添加回池中。 因此,我的假設是,對於復雜的操作,我的customQueue的性能要優於GCD。

你怎么看? 哪個表現更好? 他們是一樣的嗎?

盡管從理論上講,高優先級的全局隊列可能更快(因為您不必創建隊列,線程優先級稍有不同),但是它與您自己的自定義並發隊列之間的差異不太可能被觀察到。 但是,您可能要使用自己的自定義隊列有兩個原因:

  1. 某些功能(尤其是調度屏障)在全局隊列中不可用,因此,如果需要這些功能,則需要使用自定義隊列。

  2. 在調試應用程序時,使用自己的有意義名稱的隊列也很有用,這樣您可以更輕松地標識調試器中的各個線程。

但是,選擇高優先級全局並發隊列與自定義並發隊列並沒有實質性的性能原因。

好吧,您無需說明_myCustomConcurrentQueue的創建方式(它可以是串行隊列或並發隊列),但是假設它是並發隊列,那么就全局而言,它的優先級可能與全局並發隊列不同。 GCD從其內部的“隊列隊列”阻止列表中分派塊或函數,並以為執行該工作而創建的線程的實際線程優先級為准!

請閱讀dispatch_queue_create(3)手冊頁,並特別注意“ GLOBAL CONCURRENT QUEUES”部分。 它包含有關此確切主題的一些非常有用的詞匯(在這里太多了剪切和粘貼)。

我很確定,如果您創建自己的隊列,它最終將被添加到幕后的GCD中。 我想這更多是一種偏愛。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM