> Почему после синхронной операции выполнение кода может продолжаться в другом потоке (iOS, Swift)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: Тинькофф

Стек: iOS, Swift

> Пример ответа

В iOS-разработке на Swift синхронная операция сама по себе не меняет поток - она блокирует текущий поток до завершения. Однако выполнение кода после неё может оказаться в другом потоке по нескольким причинам:

  1. Переключение на главный поток (Main Thread) из фонового - например, после завершения фоновой задачи через DispatchQueue.main.async или await в async/await с MainActor. Синхронная операция (например, sync на фоновой очереди) выполняется в вызывающем потоке, но последующий код может быть запланирован на главном потоке.

  2. Completion handlers и замыкания - если синхронная операция запускает асинхронный колбэк (например, через URLSession), то код внутри колбэка выполняется в потоке, определённом системой (часто фоновом), даже если сама операция была синхронной.

  3. Операционные очереди (OperationQueue) - после синхронного ожидания (например, operation.waitUntilFinished()) последующий код может быть выполнен в потоке, который освободился от других задач, если очередь настроена на параллельное выполнение.

  4. GCD с QoS - при использовании sync на очереди с определённым качеством обслуживания система может временно переназначить поток для оптимизации, но это редко приводит к смене потока для последующего кода.

Ключевой момент: синхронная операция не вызывает смену потока сама по себе. Смена потока происходит из-за асинхронных механизмов (диспетчеризация, колбэки, акторы), которые запускаются после или внутри синхронного блока.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью