Здравствуйте, Sinclair, Вы писали:
S> Если мы имеем несчастье вызвать какую-то IO библиотеку, которая написана до JDK 21, то виртуальный поток вполне успешно встанет в ожидание, сожрав поток ОС.
Если эта IO-библиотека использует у себя внутри JNI, тоже написанный до 21, то да, тут оно и выжрет поток.
А если она использует тот же JDK-шний io, то всё ок.
S> Но это — чисто performance issue, т.е. старый код продолжит работать так же, как он работал в старом JDK. Апгрейд на версию библиотеки, адаптированную к JDK 21, даст автоматическое улучшение масштабируемости приложения без переписывания кода.
Да. Ещё расчёт на то, что в java принято писать pure-решения. В отличие от того же c#, где на каждый чих DllImport.
S> Хуже — ситуация, когда мы вызываем какой-то неуправляемый код, который напрямую лезет в TLS средствами операционки. Приняты ли в JDK 21 какие-то меры борьбы с таким поведением?
S> Если нет — то приложение просто взорвётся при переходе на виртуальные потоки.
Да. Возможная грабля, похоже. В смысле вряд ли оно это сможет обнаружить как-то. Но ведь реальные треды никуда не уходят. Если есть такой код, который плотно взаимодействует с нативом и делает всякие странные вещи, то его можно всё ещё пускать на реальных тредах.