Какие операции нельзя выполнять на серийной очереди (serial queue) в iOS?

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

Ответ

Серийная очередь (serial queue) выполняет задачи строго последовательно. Основные ограничения:

  1. Не вызывать sync на текущей серийной очереди — это приводит к deadlock, так как очередь блокируется, ожидая завершения задачи, которая уже в ней выполняется.

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

  3. Не полагаться на порядок выполнения между разными очередями — если задачи отправлены в разные серийные очереди, их относительный порядок не гарантирован.

  4. Не использовать для параллельных вычислений — для этого предназначены конкурентные очереди (concurrent queue).