Ответ
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 очередью. Выполнение на ней долгих блокирующих задач приведет к "зависанию" пользовательского интерфейса.
Когда использовать? Для задач, которые должны выполняться в строгом порядке или для простой потокобезопасности.