Что происходит с виртуальным потоком, когда он выполняет блокирующий сетевой вызов?
Unmount: стек виртуального потока (continuation) сохраняется в куче, несущий поток освобождается для других задач. Когда данные пришли — mount обратно, возможно на другой несущий поток.
- Код пишется блокирующим, а стоит как асинхронный
- Нельзя привязываться к идентичности несущего потока
- Работает для сетевого ввода-вывода, локов и очередей java.util.concurrent
А ещё Файловый ввод-вывод на части ОС временно занимает дополнительный несущий поток
Подробно
Именно это делает блокирующий стиль снова дешёвым: код пишется прямолинейно, а стоимость ожидания сопоставима с асинхронной моделью. Практические следствия, которые стоит назвать: несущий поток может смениться между операциями, поэтому привязываться к его идентичности нельзя; продолжение сохраняется в куче, значит цена потока — это память под стек, а не под ядро ОС; и планировщик по умолчанию — ForkJoinPool, размер которого задаётся числом ядер. Асинхронного колбэка при этом не возникает: с точки зрения кода вызов остаётся обычным блокирующим.
Что хотят услышать
- Механика unmount и mount.
- Почему блокирующий стиль снова дешёвый.
Частые ошибки
- Считать, что виртуальные потоки превращают код в асинхронный.
- Полагаться на то, что несущий поток останется тем же.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Несущий платформенный поток блокируется вместе с ним
- ✓Стек уходит в кучу, несущий поток освобождается для других задач
- ✗Планировщик создаёт новый платформенный поток на время ожидания ответа сети
- ✗Вызов автоматически превращается в асинхронный колбэк
Что спросят дальше
- Почему при этом нельзя опираться на идентичность потока в ThreadLocal-кэшах?
- Что такое continuation и как он связан с этим механизмом?
Разбор темы
- Виртуальные потоки (Project Loom)
Лёгкие потоки JVM, монтирование на carrier, когда их применять, почему не пулят и проблема pinning.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.