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

Pra*_*wal 6 multithreading objective-c grand-central-dispatch ios thread-priority

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

我看了一下这个Q&A,其中建议使用dispatch_set_target_queue()&Pass High Priority Queue(DISPATCH_QUEUE_PRIORITY_HIGH)作为自定义串行异步队列的并发队列.

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

aLe*_*ion 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);
Run Code Online (Sandbox Code Playgroud)


ipm*_*mcc 5

您的队列仍然是串行的.它只会在高优先级全局并发后台队列的一个插槽中一次执行一项任务.一旦创建,串行队列就不能以任何方式"并发".

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

手册页全面介绍了这一点.