GCD DISPATCH_QUEUE_SERIAL它将运行什么优先级?

时间:2014-05-05 14:35:56

标签: ios objective-c grand-central-dispatch priority-queue

我试图理解将使用什么优先级来运行在声明为的自定义串行队列上调度的调度块:

  

dispatch_queue_t queue =   dispatch_queue_create(" com.purposeOfQueue.queue&#34 ;,   DISPATCH_QUEUE_SERIAL);

所以,在这里,我只是说"队列"是一个串行队列。但是,系统将优先使用此队列。我知道那里有HIGH,DEFAULT,LOW,背景。

我也知道我可以这样做:

  

dispatch_set_target_queue(queue,DISPATCH_QUEUE_PRIORITY_DEFAULT);

这会使队列获得DEFAULT优先级。

但如果我只是做我上面展示的内容?

  

dispatch_queue_t queue =   dispatch_queue_create(" com.purposeOfQueue.queue&#34 ;,   DISPATCH_QUEUE_SERIAL);

要使用的优先级是什么?

4 个答案:

答案 0 :(得分:18)

值得注意的是,从iOS 8开始,队列的创建及其功能已发生变化。您将使用以下命令获取具有最低优先级的串行队列。

dispatch_queue_attr_t queueAttributes = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_BACKGROUND, 0);
self.queue = dispatch_queue_create("com.abc.myQueue", queueAttributes);

答案 1 :(得分:4)

如果您没有明确强制优先级,它将使用“默认”优先级。这种方式直接涉及“默认”一词的含义。

答案 2 :(得分:2)

我相信你可以完成你想要的东西:

    dispatch_set_target_queue(queue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));

DISPATCH_QUEUE_PRIORITY_LOW视情况而定。

答案 3 :(得分:-1)

检查串行队列的Apple documentation

  

当您希望任务按特定顺序执行时,串行队列非常有用。串行队列一次只执行一个任务,并始终从队列的头部提取任务。您可以使用串行队列而不是锁来保护共享资源或可变数据结构。与锁不同,串行队列确保以可预测的顺序执行任务。只要您将任务异步提交到串行队列,队列就永远不会死锁。

并从queue.h:

/*!
 * @const DISPATCH_QUEUE_SERIAL
 * @discussion A dispatch queue that invokes blocks serially in FIFO order.
 */
#define DISPATCH_QUEUE_SERIAL NULL