2012-03-22 3 views

ответ

31

Вы путаетесь между тем, что такое очередь, и что такое асинхронный или синхронный.

Очередь - это объект, на котором можно запускать блоки. Они могут быть серийными или параллельными. Serial означает, что если вы поместите блок в порядке A, B, C, D, то они будут выполнены A, затем B, затем C, затем D. Параллельно означает, что эти же блоки могут выполняться в другом порядке и, возможно, даже более одного в одно и то же время (при условии, что у вас есть несколько ядер, на которых можно запустить, очевидно).

Затем на async vs sync. Async означает, что когда вы позвоните dispatch_async, он немедленно вернет , и блок будет поставлен в очередь в очереди. Синхронизация означает, что при вызове dispatch_sync он вернется только после завершения выполнения блока.

Чтобы полностью ответить на ваш вопрос, если вы dispatch_sync на глобальную параллельную очередь, этот блок будет запущен, возможно, параллельно с другими блоками в этой очереди, но синхронно - то есть он не вернется, пока блок завершен.

+1

красивый ответ: ') – LuisEspinoza

+0

Спасибо :-).Там определенно больше возможностей для объяснения, но это начало, и я отвечу на любые вопросы, которые есть у @keywind. – mattjgalloway

+0

Большое спасибо за ответ – keywind

0

Apple, Док говорит

dispatch_get_global_queue

Возвращает известную глобальную параллельную очередь заданного приоритета уровня.

dispatch_queue_t dispatch_get_global_queue ( long priority, unsigned long flags);

Параметры

приоритет Приоритет очереди для его извлечения. Для списка возможных значений см. «Dispatch_queue_priority_t». flags Это значение зарезервировано для будущего использования. Вы должны всегда передавать 0. Возврат Значение Возвращает запрошенную глобальную очередь.

Обсуждение

Хорошо известные глобальные параллельные очереди не могут быть изменены. Звонки на dispatch_suspend, dispatch_resume, dispatch_set_context и аналогичные не имеют эффекта при использовании с очередями, возвращаемыми этой функцией .

Блоки, отправленные в эти глобальные параллельные очереди, могут быть выполнены одновременно друг с другом.

Доступность Доступна в iOS 4.0 и новее. Объявлен в отправки/queue.h

В дискуссии они сказали, что-> 'блоки, представленные могут быть выполнены одновременно WRT друг друга.

Таким образом, задачи могут обрабатываться Async друг с другом.