Вопрос с собеседования · Java

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

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

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

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

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

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования