2016-02-03 149 views

回答

2

第二个参数指定您想要的队列类型:串行或并发。

如果您要求提供一个串行队列,则提交给队列的块将按照它们提交的顺序执行,每次一个。

如果您要求并发队列,则块可能(或不可能)在队列中的不同线程上同时执行。

您会在定义中看到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; 

所以,你想传递什么很大程度上取决于你在做什么,以及是否你在做什么是并行的。

+0

所以,如果我想让它平行,它会是dispatch_queue_create(com.something.myqueue,dispatch_queue_attr_concurrent)?那是对的吗?我正在努力研究为并行队列传递什么。 –

+0

是的。并行是并行的一般同义词。考虑到GCD会根据系统资源等来管理队列,所以传递并发并不能保证并行性。 [这](https://mikeash.com/pyblog/friday-qa-2009-09-25-gcd-practicum.html)可能是一些很好的阅读,以帮助理解GCD的工作原理。 –