Как виртуальные потоки изменили типичный выбор между блокирующим IO и неблокирующей моделью на Selector?
Главный довод за event loop — дороговизна потока — снят: виртуальный поток дешёв и при блокировке отцепляется от несущего. Можно писать блокирующий читаемый код при высокой конкурентности.
- Selector и Netty остаются для экстремальных нагрузок и протоколов с тонким управлением
- Реактивный стек оправдан backpressure и потоками данных, а не только масштабом
- Ограничения внешних ресурсов (пулы соединений) никуда не делись
А ещё Стектрейсы и отладка снова понятны
Подробно
Исторически модель поток-на-соединение упиралась в стоимость платформенных потоков, и ради масштаба переходили на Selector с event loop, платя за это резко усложнённым кодом: логика размазывается по колбэкам, стектрейсы теряют смысл, отладка тяжелеет. Виртуальные потоки убирают исходную причину — блокировка больше не удерживает ресурс ОС, поэтому прямолинейный последовательный код снова масштабируется. Это не отменяет NIO: каналы и буферы остаются основой, а event loop по-прежнему уместен в очень низкоуровневых и латентно-критичных случаях. Но для типичного серверного приложения выбор сместился обратно в сторону простого блокирующего стиля.
Что хотят услышать
- Что изменилось и почему.
- Где event loop всё ещё нужен.
Частые ошибки
- Считать NIO устаревшим целиком — речь только о модели с Selector.
- Переписывать работающий асинхронный код без измеренной причины.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Selector стал единственным поддерживаемым способом работы с сетью
- ✓Блокирующий стиль снова приемлем: поток дёшев и отпускает несущий
- ✗Разницы больше нет вообще: обе модели компилируются в один и тот же код
- ✗Неблокирующий IO перестал работать в новых версиях JVM
Что спросят дальше
- Почему асинхронный код тяжелее отлаживать?
- Где event loop всё ещё оправдан?
Разбор темы
- NIO: каналы, буферы и неблокирующий ввод-вывод
io против nio, Channel и ByteBuffer с его flip/clear, Selector и event loop, влияние виртуальных потоков и NIO.2.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.