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

Как виртуальные потоки изменили типичный выбор между блокирующим IO и неблокирующей моделью на Selector?

MiddleВвод-вывод и NIOJava >=21
Коротко

Главный довод за event loop — дороговизна потока — снят: виртуальный поток дешёв и при блокировке отцепляется от несущего. Можно писать блокирующий читаемый код при высокой конкурентности.

  • Selector и Netty остаются для экстремальных нагрузок и протоколов с тонким управлением
  • Реактивный стек оправдан backpressure и потоками данных, а не только масштабом
  • Ограничения внешних ресурсов (пулы соединений) никуда не делись

А ещё Стектрейсы и отладка снова понятны

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

Подробно

Исторически модель поток-на-соединение упиралась в стоимость платформенных потоков, и ради масштаба переходили на Selector с event loop, платя за это резко усложнённым кодом: логика размазывается по колбэкам, стектрейсы теряют смысл, отладка тяжелеет. Виртуальные потоки убирают исходную причину — блокировка больше не удерживает ресурс ОС, поэтому прямолинейный последовательный код снова масштабируется. Это не отменяет NIO: каналы и буферы остаются основой, а event loop по-прежнему уместен в очень низкоуровневых и латентно-критичных случаях. Но для типичного серверного приложения выбор сместился обратно в сторону простого блокирующего стиля.

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

  • Что изменилось и почему.
  • Где event loop всё ещё нужен.

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

  • Считать NIO устаревшим целиком — речь только о модели с Selector.
  • Переписывать работающий асинхронный код без измеренной причины.

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

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

Показать варианты и ответ
  • ✓Блокирующий стиль снова стал приемлемым при высокой конкурентности: поток дёшев и при блокировке освобождает несущий
  • ✗Selector стал единственным поддерживаемым способом работы с сетью
  • ✗Неблокирующий IO перестал работать в новых версиях JVM
  • ✗Разницы между моделями больше нет вообще — они компилируются в один код

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

  • Почему асинхронный код тяжелее отлаживать?
  • Где event loop всё ещё оправдан?

Разбор темы

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

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

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

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

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