Objective c 使用GCD创建高优先级串行调度队列
如何创建以高优先级运行的自定义串行队列Objective c 使用GCD创建高优先级串行调度队列,objective-c,macos,grand-central-dispatch,Objective C,Macos,Grand Central Dispatch,如何创建以高优先级运行的自定义串行队列 现在我正在使用myQueue=dispatch\u queue\u create(“com.MyApp.myQueue”,NULL)但这似乎不允许设置优先级?是否要求您有一个自定义队列?如果没有,您可以考虑将块分配到高优先级全局队列,您可以使用以下方法检索该队列: dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0) 请记住,这是全局队列,因此可能会
现在我正在使用
myQueue=dispatch\u queue\u create(“com.MyApp.myQueue”,NULL)代码>但这似乎不允许设置优先级?是否要求您有一个自定义队列?如果没有,您可以考虑将块分配到高优先级全局队列,您可以使用以下方法检索该队列:
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
请记住,这是全局队列,因此可能会影响其他并发操作。创建一个串行队列,然后使用调度设置目标队列()
将其目标队列设置为高优先级队列
以下是方法:
dispatch_set_target_queue(myQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));
现在,myQueue
应该以高优先级连续运行。
如果您想了解更多信息,请点击这里。该函数可能是新的,因为已发布接受的答案,但类似于:
dispatch_queue_attr_t priorityAttribute = dispatch_queue_attr_make_with_qos_class(
DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INITIATED, -1
);
myQueue = dispatch_queue_create("com.MyApp.MyQueue", priorityAttribute);
可以为队列赋予高优先级(“服务质量”)。有一个更高的QOS级别,但是QOS\u class\u USER\u INITIATED
相当于DISPATCH\u QUEUE\u PRIORITY\u HIGH
好的,这仍然意味着我的队列本身将保持串行,但随后将其工作发布到并发队列?是的!应该做你想做的。等等!队列可以将块分派到其他队列中?!?当然可以。事实上,如果我没有记错代码,串行队列最终总是以一个全局并发队列为目标。不要引用我的话,我已经有一段时间没有读过那个代码了。太棒了!我甚至不知道这是可能的(在队列本身上设置目标队列),但在文档中它甚至是:调度队列的优先级是从其目标队列继承的。使用dispatch_get_global_queue函数获得所需优先级的合适目标队列。
要求队列为串行队列。这应该是可接受的答案。这是正确的方法,这是正确的方法。我做了很多高性能的应用程序。不要使用默认值