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

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

Ответ

Тип создаваемой очереди зависит от способа ее получения:

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

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

    // Concurrent очередь с приоритетом .default
    DispatchQueue.global().async {
        print("Задача выполняется в параллельной очереди")
    }

Ключевое отличие:

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

Почему такие умолчания: Serial очереди безопасны для доступа к общему ресурсу и проще для отладки. Concurrent системные очереди предназначены для параллельного выполнения независимых задач для увеличения производительности.