Как создать собственную очередь (DispatchQueue) в Swift?

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

Ответ

Да, создание собственных очередей — стандартная практика для организации многопоточности. Используйте класс DispatchQueue.

Создание очереди:

// 1. Серийная очередь (Serial)
// Задачи выполняются строго по порядку, одна за другой.
let serialQueue = DispatchQueue(label: "com.yourapp.serialQueue")

// 2. Параллельная очередь (Concurrent)
// Задачи могут выполняться одновременно, если есть свободные потоки.
let concurrentQueue = DispatchQueue(
    label: "com.yourapp.concurrentQueue",
    attributes: .concurrent
)

// 3. Очередь с указанием качества обслуживания (QoS)
// QoS определяет приоритет выполнения задач системой.
let highPriorityQueue = DispatchQueue(
    label: "com.yourapp.highPriority",
    qos: .userInteractive, // Наивысший приоритет для UI-отклика
    attributes: .concurrent
)

Ключевые параметры:

  • label: Уникальный идентификатор для отладки (виден в Instruments).
  • qos: Quality of Service. Варианты: .userInteractive, .userInitiated, .utility, .background.
  • attributes: .concurrent для параллельной очереди. По умолчанию — серийная.

Использование:

serialQueue.async {
    // Безопасное изменение общего ресурса
    // (race condition маловероятен в серийной очереди)
}

concurrentQueue.async(flags: .barrier) {
    // Запись с барьером: выполнится одна, когда все предыдущие задачи завершатся
}