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

Что верно про практическое применение виртуальных потоков?

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

Не пулить (поток на задачу), применять для блокирующего ввода-вывода, помнить, что ThreadLocal на миллионах потоков дорог, и ограничивать доступ к внешним ресурсам семафором — пул соединений к БД от виртуальных потоков не вырастет.

  • Для CPU-bound выигрыша нет
  • Executors.newVirtualThreadPerTaskExecutor()
  • Spring Boot 3.2+: spring.threads.virtual.enabled=true

А ещё Ожидание на synchronized до JDK 24 закрепляло несущий поток

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

Подробно

Смысл виртуальных потоков в том, что блокировка перестаёт быть дорогой: поток отцепляется от несущего платформенного и не удерживает его. Отсюда: пул виртуальных потоков — антипаттерн, задача получает свой поток. Для вычислительных задач выигрыша нет — там по-прежнему упираются в ядра, и уместен обычный пул или Fork/Join. Важное предупреждение про масштаб: миллион потоков с ThreadLocal — это миллион копий значения. И отдельно стоит сказать вслух, что снятие ограничения на число потоков лишь передвигает узкое место дальше — в пул соединений к базе или в лимиты внешнего API, которые от этого шире не становятся.

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

  • Модель «поток на задачу».
  • Где выигрыш и где нет.
  • ThreadLocal и ограничение ресурсов.

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

  • Заворачивать виртуальные потоки в пул «по привычке».
  • Ожидать ускорения CPU-bound кода.

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

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Их не пулят: виртуальный поток дёшев, создаётся под задачу и выбрасывается
  • ✓Выигрыш дают IO-bound нагрузки; для CPU-bound задач они не ускоряют ничего
  • ✓ThreadLocal при миллионах потоков перестаёт быть дешёвым и требует пересмотра
  • ✗Они увеличивают пропускную способность внешних систем, к которым обращается сервис

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

  • Что такое pinning и когда он ещё возможен?
  • Как structured concurrency меняет работу с группами задач?

Разбор темы

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

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

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

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

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