Ответ
Серийная очередь (serial queue) выполняет задачи строго последовательно. Основные ограничения:
-
Не вызывать
syncна текущей серийной очереди — это приводит к deadlock, так как очередь блокируется, ожидая завершения задачи, которая уже в ней выполняется.let serialQueue = DispatchQueue(label: "com.example.serial") serialQueue.async { // ОШИБКА: Вызов sync на той же очереди вызывает deadlock serialQueue.sync { print("Этот код никогда не выполнится") } } -
Избегать длительных синхронных операций — они блокируют всю очередь, останавливая выполнение других задач.
-
Не полагаться на порядок выполнения между разными очередями — если задачи отправлены в разные серийные очереди, их относительный порядок не гарантирован.
-
Не использовать для параллельных вычислений — для этого предназначены конкурентные очереди (
concurrent queue).