Какой тип у главной очереди (DispatchQueue.main) в GCD: серийный или конкурентный?

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

Ответ

Главная очередь (DispatchQueue.main) — это серийная (serial) очередь. Она выполняет задачи строго последовательно, одна за другой, и привязана к главному потоку приложения.

Почему это важно? UI-фреймворки (UIKit, SwiftUI) не являются потокобезопасными. Все операции с пользовательским интерфейсом должны выполняться на этой очереди.

Пример использования:

// Обновление UI после сетевого запроса
DispatchQueue.main.async {
    self.titleLabel.text = "Новый заголовок"
    self.tableView.reloadData()
}

Ключевое правило: Не выполняйте блокирующие или ресурсоёмкие операции (сеть, обработка изображений, сложные вычисления) на главной очереди. Это приведёт к "фризам" интерфейса. Для фоновых задач используйте глобальные конкурентные очереди (DispatchQueue.global(qos: .background)) или создавайте собственные серийные очереди.