нужен совет по добавлению блоков в очередь (target-c) с использованием GCD, пожалуйста - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть приложение для iPad с возможностью многопоточности с использованием GCD.

Когда мне нужно выполнить какой-либо тип обработки фона, я использую следующий код:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ -backgroundProcessing- }**

Так что мой2 вопроса:

1) Поскольку я добавил ALL моей фоновой обработки в одну и ту же очередь, и очереди всегда удаляют FIFO из очереди, будут ли они по-прежнему выполняться одновременно?Я предполагаю, что они будут, но я не уверен.

2) Согласно Apple-Docs, я уже знаю, что

Система предоставляет каждому приложению три параллельные очереди отправки.Эти очереди являются глобальными для приложения и различаются только по уровню приоритета.

но, поскольку моя обработка не требует DISPATCH_QUEUE_PRIORITY_HIGH, DISPATCH_QUEUE_PRIORITY_LOW или DISPATCH_QUEUE_PRIORITY_BACKGROUND, рекомендуется / рекомендуется / что хорошо / рекомендуетсякогда-нибудь / помещать всю мою фоновую обработку в глобальную очередь DISPATCH_QUEUE_PRIORITY_DEFAULT?Или я должен начать создавать собственные очереди, чтобы я мог иметь несколько для использования.И если я создам больше очередей, будет ли прирост производительности?

1 Ответ

3 голосов
/ 08 декабря 2011

1) Нет, глобальные очереди играют в этом особую роль. Они могут выполнять несколько блоков одновременно в разных потоках. Они более или менее имеют быстрый способ ввода фоновых заданий, если вы не заботитесь о порядке (см. [1], Блоки, отправленные в эти глобальные параллельные очереди, могут выполняться параллельно друг другу. ). Если вам нужен последовательный порядок, создайте очередь для вашей задачи. Они довольно легкие и, следовательно, не сильно влияют на производительность.

2) Приоритет по умолчанию должен соответствовать нормальным задачам. Приоритеты становятся более интересными при создании задач с интенсивной загрузкой процессора или более сложных иерархий очередей (поскольку вы можете помещать очереди в очереди).

PS: Я настоятельно рекомендую видеоролики GCD с WWDC 2010 и 2011, поскольку они дают некоторое представление о более специфических частях GCD.

[1] http://developer.apple.com/library/ios/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html

...