Ответ
Глобальная очередь (DispatchQueue.global()) — это concurrent очередь. Задачи, добавленные из любых потоков, выполняются параллельно в пуле системных потоков.
Ключевые характеристики:
- Порядок не гарантирован — задачи начинают выполняться в порядке добавления, но завершаются в произвольном порядке.
- Параллелизм — система сама управляет количеством одновременных потоков.
Пример:
// Добавление задач из разных потоков
DispatchQueue.global().async { print("Task 1: (Thread.current)") }
DispatchQueue.global().async { print("Task 2: (Thread.current)") }
// Вывод может быть: Task 2, Task 1 (или наоборот)
Важные замечания:
- Thread explosion — чрезмерное количество задач может привести к созданию множества потоков и снижению производительности.
- Синхронизация — для доступа к общим ресурсам из задач на глобальной очереди используйте механизмы вроде
DispatchSemaphore,NSLockили изолированных очередей (DispatchQueue(label: ..., attributes: .concurrent)с барьерами).