Что такое DispatchQueue.global в Swift?

«Что такое DispatchQueue.global в Swift?» — вопрос из категории Многопоточность, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

DispatchQueue.global — это глобальная системная concurrent (параллельная) очередь общего назначения, используемая для выполнения задач в фоновых потоках. Она является частью Grand Central Dispatch (GCD).

Основное назначение: Вынос длительных или блокирующих операций (сетевые запросы, обработка изображений, сложные вычисления) из главного потока, чтобы не блокировать пользовательский интерфейс.

Использование с Quality of Service (QoS): У очереди можно указать приоритет через QoS, что помогает системе оптимально распределять ресурсы.

// Выполнение задачи в фоне с низким приоритетом
DispatchQueue.global(qos: .background).async {
    // Выполнение тяжелой операции (например, сохранение данных на диск)
    let processedData = self.processLargeDataset()

    // Возврат результата в главный поток для обновления UI
    DispatchQueue.main.async {
        self.updateUI(with: processedData)
    }
}

Доступные уровни QoS (от высокого к низкому приоритету):

  • .userInteractive — для задач, критичных к задержкам и напрямую влияющих на UI (анимации). Используйте осторожно в фоне.
  • .userInitiated — для задач, инициированных пользователем, результат которых нужен немедленно (открытие документа).
  • .default — стандартный приоритет по умолчанию.
  • .utility — для длительных задач с индикатором прогресса (загрузка, вычисления).
  • .background — для задач, невидимых пользователю и не требующих немедленного результата (индексация, синхронизация).
  • .unspecified — устаревший приоритет, следует избегать.

Важно: DispatchQueue.global — это параллельная очередь. Для последовательного выполнения задач в фоне создавайте свою собственную очередь: DispatchQueue(label: "com.example.serial").