6

Как установить высокий приоритет для созданной последовательной асинхронной очереди с использованием GCD?Установить приоритет для настраиваемой последовательной асинхронной очереди

Я посмотрел на this Q&A, где высказываются предположение, чтобы использовать dispatch_set_target_queue() & Pass очереди высокого приоритета (DISPATCH_QUEUE_PRIORITY_HIGH), который является Параллельной очередью на заказ последовательные асинхронные очередей.

Я понимаю, что это приведет к одновременному выполнению всех задач в последовательной очереди. Правильно ли я понимаю? Если да, то какое альтернативное решение?

+1

Какого черта будет голосовать кто-то вниз это без комментариев? Я считаю три ответа на ответы (по состоянию на 13 мая 2015 года), это означает, что вопрос помог по крайней мере трем людям найти то, что они оценили. На этом сайте иногда кажется, что это значит. –

ответ

5

Ваша очередь будет по-прежнему серийной. Он будет выполнять свои задачи по одному за раз в одном слоте высокоприоритетной, глобальной параллельной фоновой очереди. После создания последовательная очередь не может быть «сделана параллельной» любыми способами.

Аналогичным образом, если вы создаете параллельную очередь и вы настроите ее на целевую последовательную очередь, она становится серийной.

Все это рассматривается в этом man page.

+0

Можете ли вы добавить ссылку на документацию Apple, в которой говорится, что ... Coz я не нашел. Также есть способ установить приоритет очереди только NEXT на main_queue(). –

+0

Ссылка добавлена. Что вы подразумеваете под «Также есть способ установить приоритет очереди только NEXT на main_queue()?» Если вы имеете в виду «есть ли способ установить приоритет очереди таким образом, чтобы основной поток всегда имел наивысший приоритет?» моя убежденность, без доказательств, заключалась бы в том, что вы не можете явно это сделать, но на практике любой целевой приоритет ниже, чем «DISPATCH_QUEUE_PRIORITY_HIGH», будет эффективно отвечать этому требованию. – ipmcc

+0

Я знаю, что очередь TOP Most Priority - mainQueue(). Пользовательская очередь, которую я создал, должна иметь следующий высокий приоритет. Это ясно? –

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); 
+0

В документации для параметра 'relative_priority' указано:« Отрицательное смещение от максимального поддерживаемого приоритета планировщика для данного класса качества обслуживания. Это значение должно быть меньше «0» и больше, чем «MIN_QOS_CLASS_PRIORITY». Но вы здесь '0'. –

Смежные вопросы