Здравствуйте, ·, Вы писали:
Очень, очень интересная штука.
Повод перечитать
Fibers under the magnifying glass.
Вкратце, как я понимаю, основная проблема зелёных потоков — взаимодействие с неуправляемым кодом.
Java пытается выехать на том, что
весь код — управляемый, и все блокирующие IO операции заботливо подменены под капотом на вызовы неблокирующих с последующим yield.
Если мы имеем несчастье вызвать какую-то IO библиотеку, которая написана до JDK 21, то виртуальный поток вполне успешно встанет в ожидание, сожрав поток ОС.
Но это — чисто performance issue, т.е. старый код продолжит работать
так же, как он работал в старом JDK. Апгрейд на версию библиотеки, адаптированную к JDK 21, даст автоматическое улучшение масштабируемости приложения без переписывания кода.
Хуже — ситуация, когда мы вызываем какой-то неуправляемый код, который напрямую лезет в TLS средствами операционки. Приняты ли в JDK 21 какие-то меры борьбы с таким поведением?
Если нет — то приложение просто взорвётся при переходе на виртуальные потоки.
В остальном — конечно, было бы прикольно иметь возможность прозрачного использования кооперативной многозадачности без утомительного переписывания прямолинейного кода на код с async/await.