Как говорится в документе Apple, dispatch_get_global_queue() - это параллельная очередь, а dispatch_sync - это что-то значение serial.Then задачи обрабатываются async или sync?Is dispatch_sync (dispatch_get_global_queue (xxx), task) sync или async
ответ
Вы путаетесь между тем, что такое очередь, и что такое асинхронный или синхронный.
Очередь - это объект, на котором можно запускать блоки. Они могут быть серийными или параллельными. Serial означает, что если вы поместите блок в порядке A, B, C, D, то они будут выполнены A, затем B, затем C, затем D. Параллельно означает, что эти же блоки могут выполняться в другом порядке и, возможно, даже более одного в одно и то же время (при условии, что у вас есть несколько ядер, на которых можно запустить, очевидно).
Затем на async vs sync. Async означает, что когда вы позвоните dispatch_async
, он немедленно вернет , и блок будет поставлен в очередь в очереди. Синхронизация означает, что при вызове dispatch_sync
он вернется только после завершения выполнения блока.
Чтобы полностью ответить на ваш вопрос, если вы dispatch_sync
на глобальную параллельную очередь, этот блок будет запущен, возможно, параллельно с другими блоками в этой очереди, но синхронно - то есть он не вернется, пока блок завершен.
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 друг с другом.
- 1. Visual Basic Async Task вместо Sync Task
- 2. разница между async + semphore vs sync queue
- 3. Принудительное отключение async wrapped sync task
- 4. Заблокировать и разблокировать dispatch_queue_t в async task
- 5. Выполняет вызов dispatch_sync (dispatch_get_global_queue()) в основном потоке, чтобы приложение «зависало»?
- 6. Async Task vs Task
- 7. Async Action + Sync DBQuery VS sync Действие + Async DbQuery
- 8. iOS async task freezes
- 9. Async task Android выполнить
- 10. nodeJS Async vs Sync
- 11. CancellationTokenRegistration.Dispose in Async Task
- 12. Async cancelabel task
- 13. Async Task Best Practice
- 14. Async Task android
- 15. Async task повышает NotImplementedException
- 16. async task in node.js
- 17. Crash with Async Task
- 18. Ajax sync or async
- 19. Узел async vs sync
- 20. Node.js sync vs. async
- 21. Async task, BufferedReader
- 22. Async Lazy Timeout Task
- 23. GCD dispatch_barrier или dispatch_sync?
- 24. Async Task and Toast - Android
- 25. Async Task .Net 4.5
- 26. Async Task Freezes UI
- 27. Async/wait task issue
- 28. async task null error
- 29. Android Timed Async Task
- 30. C# async task cancelation
красивый ответ: ') – LuisEspinoza
Спасибо :-).Там определенно больше возможностей для объяснения, но это начало, и я отвечу на любые вопросы, которые есть у @keywind. – mattjgalloway
Большое спасибо за ответ – keywind