设置自定义创建的串行异步队列的优先级

时间:2014-10-03 16:33:55

标签: ios objective-c multithreading grand-central-dispatch thread-priority

如何使用GCD设置自定义创建的串行异步队列的高优先级?

我看了this Q&A,其中建议使用dispatch_set_target_queue()&将高优先级队列(DISPATCH_QUEUE_PRIORITY_HIGH)作为并发队列传递给自定义串行异步队列。

我的理解是,这将使串行队列上的所有任务同时执行。我的理解是否正确?如果是这样,什么是替代解决方案?

2 个答案:

答案 0 :(得分:6)

在iOS 8之前,将目标队列设置为高优先级队列是如何实现这一目标的。即使目标队列是并发的,您的队列仍将保持连续。

从版本8.0开始,还有另一种方法:

dispatch_queue_attr_t queueAttrs = dispatch_queue_attr_make_with_qos_class(
    DISPATCH_QUEUE_SERIAL,
    QOS_CLASS_USER_INITIATED /* Same as DISPATCH_QUEUE_PRIORITY_HIGH */, 
    0
);

dispatch_queue_t queue = dispatch_queue_create("myqueue",queueAttrs);

答案 1 :(得分:5)

您的队列仍然是串行的。它只会在高优先级全局并发后台队列的一个插槽中一次执行一项任务。一旦创建,串行队列就不能同时生成#34;无论如何。

同样,如果您创建并发队列并将其设置为以串行队列为目标,则它实际上会变为串行队列。

man page已涵盖此内容。