Main queue - это последовательная очередь (serial queue), работающая в главном потоке (main thread) приложения. Она используется для обновления пользовательского интерфейса и обработки UI-событий. Все задачи, отправленные в main queue, выполняются строго последовательно.
Global queues - это параллельные очереди (concurrent queues), предоставляемые системой. Они используются для выполнения фоновых задач, не связанных с UI, что позволяет избежать блокировки main thread. Существует несколько глобальных очередей с разными приоритетами качества обслуживания (Quality of Service, QoS).
Вот таблица с основными типами глобальных очередей по приоритету QoS:
| QoS Priority | Описание | Пример использования |
|---|---|---|
userInteractive | Самый высокий приоритет. Используется для задач, требующих немедленного выполнения для интерактивности UI. | Анимации, обработка событий касания. |
userInitiated | Высокий приоритет. Используется для задач, непосредственно инициированных пользователем и требующих быстрого результата. | Отображение результатов поиска, загрузка контента для отображения. |
default | Приоритет по умолчанию. Между userInitiated и utility. | Задачи, для которых приоритет явно не указан. |
utility | Средний приоритет. Используется для длительных задач, выполняющихся в фоновом режиме с прогрессом. | Загрузка файлов, обработка данных. |
background | Низкий приоритет. Используется для задач, выполняющихся в фоновом режиме и не требующих внимания пользователя. | Синхронизация данных, резервное копирование. |
unspecified | Приоритет не указан. Система определяет его на основе других факторов. | Редко используется. |
Пример отправки задачи в main и глобальную очередь:
swift