第二個參數指定您想要的隊列類型:串行或併發。
如果您要求提供一個串行隊列,則提交給隊列的塊將按照它們提交的順序執行,每次一個。
如果您要求併發隊列,則塊可能(或不可能)在隊列中的不同線程上同時執行。
您會在定義中看到NULL
表示串行。下面是從queue.h定義:
/*!
* @typedef dispatch_queue_attr_t
*
* @abstract
* Attribute for dispatch queues.
*/
DISPATCH_DECL(dispatch_queue_attr);
/*!
* @const DISPATCH_QUEUE_SERIAL
* @discussion A dispatch queue that invokes blocks serially in FIFO order.
*/
#define DISPATCH_QUEUE_SERIAL NULL
/*!
* @const DISPATCH_QUEUE_CONCURRENT
* @discussion A dispatch queue that may invoke blocks concurrently and supports
* barrier blocks submitted with the dispatch barrier API.
*/
#define DISPATCH_QUEUE_CONCURRENT \
DISPATCH_GLOBAL_OBJECT(dispatch_queue_attr_t, \
_dispatch_queue_attr_concurrent)
__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_3)
DISPATCH_EXPORT
struct dispatch_queue_attr_s _dispatch_queue_attr_concurrent;
所以,你想傳遞什麼很大程度上取決於你在做什麼,以及是否你在做什麼是並行的。
所以,如果我想讓它平行,它會是dispatch_queue_create(com.something.myqueue,dispatch_queue_attr_concurrent)?那是對的嗎?我正在努力研究爲並行隊列傳遞什麼。 –
是的。並行是並行的一般同義詞。考慮到GCD會根據系統資源等來管理隊列,所以傳遞併發並不能保證並行性。 [這](https://mikeash.com/pyblog/friday-qa-2009-09-25-gcd-practicum.html)可能是一些很好的閱讀,以幫助理解GCD的工作原理。 –