Какой тип очереди создается по умолчанию в GCD (Grand Central Dispatch)?

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

Ответ

При создании пользовательской очереди через конструктор DispatchQueue(label:) по умолчанию создается последовательная (serial) очередь.

Ключевые моменты:

  • Serial очередь: Задачи выполняются строго по очереди, одна за другой.
  • Concurrent очередь: Задачи могут выполняться параллельно, если есть доступные потоки.

Примеры создания очередей в Swift:

// Последовательная очередь (по умолчанию)
let serialQueue = DispatchQueue(label: "com.example.serial")

// Параллельная очередь (требует явного указания атрибута)
let concurrentQueue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)

Важные исключения из «правила по умолчанию»:

  1. Глобальные очереди (DispatchQueue.global()) всегда являются параллельными (concurrent).
  2. Main очередь (DispatchQueue.main) — это специальная последовательная очередь, связанная с главным потоком для обновления UI.

Почему serial по умолчанию? Это безопаснее, так как исключает гонки данных (data races) при доступе к общим ресурсам из задач в одной очереди.