Получить доступ

Что происходит с виртуальным потоком, когда он выполняет блокирующий сетевой вызов?

MiddleМногопоточностьJava >=21
Коротко

Unmount: стек виртуального потока (continuation) сохраняется в куче, несущий поток освобождается для других задач. Когда данные пришли — mount обратно, возможно на другой несущий поток.

  • Код пишется блокирующим, а стоит как асинхронный
  • Нельзя привязываться к идентичности несущего потока
  • Работает для сетевого ввода-вывода, локов и очередей java.util.concurrent

А ещё Файловый ввод-вывод на части ОС временно занимает дополнительный несущий поток

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Именно это делает блокирующий стиль снова дешёвым: код пишется прямолинейно, а стоимость ожидания сопоставима с асинхронной моделью. Практические следствия, которые стоит назвать: несущий поток может смениться между операциями, поэтому привязываться к его идентичности нельзя; продолжение сохраняется в куче, значит цена потока — это память под стек, а не под ядро ОС; и планировщик по умолчанию — ForkJoinPool, размер которого задаётся числом ядер. Асинхронного колбэка при этом не возникает: с точки зрения кода вызов остаётся обычным блокирующим.

Что хотят услышать

  • Механика unmount и mount.
  • Почему блокирующий стиль снова дешёвый.

Частые ошибки

  • Считать, что виртуальные потоки превращают код в асинхронный.
  • Полагаться на то, что несущий поток останется тем же.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Его стек сохраняется в куче, поток отцепляется от несущего, и тот берёт другую задачу; при готовности данных поток прицепляется обратно
  • ✗Несущий платформенный поток блокируется вместе с ним
  • ✗Вызов автоматически превращается в асинхронный колбэк
  • ✗Планировщик создаёт новый платформенный поток на время ожидания

Что спросят дальше

  • Почему при этом нельзя опираться на идентичность потока в ThreadLocal-кэшах?
  • Что такое continuation и как он связан с этим механизмом?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем