Является ли главная очередь (Main Queue) в iOS последовательной или параллельной?

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

Ответ

Главная очередь (Main Queue/DispatchQueue.main) в iOS является последовательной (serial).

Это означает, что задачи, добавленные в эту очередь, выполняются строго по порядку, одна за другой, в рамках главного потока (Thread 1).

Почему это важно?

  • UIKit не потокобезопасен. Все операции с пользовательским интерфейсом (обновление лейблов, анимации, обработка касаний) должны выполняться на главной очереди.
  • Гарантирует последовательность и предсказуемость обновлений UI.

Пример:

// Задачи будут выполнены строго в порядке их добавления.
DispatchQueue.main.async {
    print("Task 1: Обновляем текст лейбла")
}

DispatchQueue.main.async {
    print("Task 2: Запускаем анимацию")
}
// Вывод всегда будет: "Task 1", затем "Task 2"

Ключевые отличия от параллельной (concurrent) очереди:

  • Последовательная: Одна задача за раз. Используется для синхронизации доступа к ресурсам или, как в случае с Main Queue, для работы с UI.
  • Параллельная: Может запускать несколько задач одновременно (если система имеет доступные потоки). Используется для фоновых вычислений.