第二个参数指定您想要的队列类型:串行或并发。
如果您要求提供一个串行队列,则提交给队列的块将按照它们提交的顺序执行,每次一个。
如果您要求并发队列,则块可能(或不可能)在队列中的不同线程上同时执行。
您会在定义中看到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的工作原理。 –