Чем приостановка потока отличается от его блокировки?

Приостановка и блокировка потока: в чём отличие При приостановке (suspend) поток добровольно прекращает выполнение и ожидает внешнего сигнала При блокировке (block) поток ожидает ресурс или событие — например, I/O или…

Короткий ответ

Что ответить на собеседовании

Приостановка и блокировка потока: в чём отличие При приостановке (suspend) поток добровольно прекращает выполнение и ожидает внешнего сигнала При блокировке (block) поток ожидает ресурс или событие — например, I/O или мьютекс Приостановка, как правило, выполняется явно и контролируется приложением Блокировка возникает вследствие системного ожидания или необходимости синхронизации Приостановленный поток не использует CPU, однако сохраняет свой контекст Блокировка бывает активной (spinlock) либо пассивной (sleep) Главное практическое различие: приостановкой управляет код приложения, а блокировка представляет собой системное ожидание ресурса

Подробный разбор

Ответ с пояснениями

Приостановка и блокировка потока: в чём отличие

  • При приостановке (suspend) поток добровольно прекращает выполнение и ожидает внешнего сигнала
  • При блокировке (block) поток ожидает ресурс или событие — например, I/O или мьютекс
  • Приостановка, как правило, выполняется явно и контролируется приложением
  • Блокировка возникает вследствие системного ожидания или необходимости синхронизации
  • Приостановленный поток не использует CPU, однако сохраняет свой контекст
  • Блокировка бывает активной (spinlock) либо пассивной (sleep)
  • Главное практическое различие: приостановкой управляет код приложения, а блокировка представляет собой системное ожидание ресурса

Итог: приостановка — это управляемая пауза, блокировка — ожидание, пока ресурс освободится.

Подробный ответ

Основной ответ

Приостановка (suspension) и блокировка (blocking) потока — разные механизмы управления его выполнением, влияющие на состояние потока и расход системных ресурсов. Приостановка означает временное прекращение работы потока с последующей возможностью продолжить выполнение; обычно такой механизм применяется в высокоуровневых языках и сопрограммах (coroutines). Блокировка представляет собой ожидание: поток остаётся приостановленным, пока не станет доступен нужный ресурс или не произойдёт определённое событие.

Ключевые моменты

  • Приостановка потока широко применяется в асинхронном программировании и корутинах, например в Kotlin и Python. Поток «засыпает», не расходуя CPU, при этом его состояние сохраняется в памяти, а выполнение можно продолжить без переключения контекста ОС. Обычно такой механизм реализуется средствами языка или фреймворка и не требует перевода потока ядром ОС в состояние ожидания.
  • Блокировка потока выполняется на уровне ОС: поток переводится в состояние ожидания и освобождает CPU, но остаётся недоступным для выполнения до наступления нужного условия — например, получения мьютекса, сетевых данных или завершения I/O. При этом может происходить переключение контекста ядра, которое обходится дороже с точки зрения производительности.
  • Различие проявляется в затратах ресурсов и предсказуемости: приостановка обеспечивает более лёгкое ожидание без издержек переключения контекста, тогда как блокировка является классическим механизмом синхронизации многопоточных задач и может снижать производительность из-за накладных расходов ОС.

Практический контекст

В современных приложениях для эффективной реализации асинхронности, например в Kotlin Coroutine 1.6+ и Node.js, приостановка помогает писать неблокирующий код. В Java многопоточные задачи чаще строятся на блокировках (synchronized, ReentrantLock). Они требуют больше ресурсов, зато удобнее при работе с классической моделью многопоточности.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку