Что такое Serial (последовательная) очередь в iOS?

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

Ответ

Serial (последовательная) — это режим выполнения задач, при котором задачи выполняются строго одна за другой. В iOS это основное свойство очередей (DispatchQueue) и операций (OperationQueue).

Практический пример с DispatchQueue:

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

serialQueue.async {
    print("Задача 1 начата")
    Thread.sleep(forTimeInterval: 1)
    print("Задача 1 завершена")
}

serialQueue.async {
    // Эта задача начнётся ТОЛЬКО после полного завершения Задачи 1
    print("Задача 2 начата")
}
// Вывод: "Задача 1 начата" -> (пауза 1 сек) -> "Задача 1 завершена" -> "Задача 2 начата"

Ключевые аспекты и применение:

  • Гарантия порядка: Обеспечивает FIFO (First-In-First-Out) порядок выполнения, что критично для операций, зависящих от состояния предыдущих.
  • Синхронизация доступа: Часто используется для безопасного доступа к общему ресурсу (например, к свойству класса) из разных потоков, предотвращая race condition.
  • Главная очередь (DispatchQueue.main): Является serial очередью. Выполнение на ней долгих блокирующих задач приведет к "зависанию" пользовательского интерфейса.

Когда использовать? Для задач, которые должны выполняться в строгом порядке или для простой потокобезопасности.