Re[4]: Киллер фича JDK 21 - virtual threads
От: · Великобритания  
Дата: 05.05.23 08:34
Оценка:
Здравствуйте, reversecode, Вы писали:

r> не совсем понятно в техническом плане что там они такого сделали

Возможность подменять стеки на уровне рантайма. И собственно всё.

r> если в эршланге вытесняющий атом то в яве сделали каждую инструкцию что ли

r> ну т.е. как в обычном cpu где ОС каждый поток может прервать в любой момент
Виртуальные треды перешедулятся на реальные треды в момент всяких многопоточных действий, типа locks, yield, sleep и т.п. Если виртуальный тред будет внутри себя крутить вычислительный цикл, то он займёт реальный тред. Т.е. кооперативная многозадачность или асинк с человеческим лицом.

Когда в при исполнении кода виртуального треда происходил блокировка/етс — стек сохраняется в куче, и добавляется таск в шедулер на продолжение. Шедулер берёт очередной таск, восстанавливает стек и монтирует его на реальный тред. И так по кругу.
Сами стеки — это маленькие кусочки порядка сотни байт.

r> времени разбираться нет

r> так что если будет инфа о технических подробностях, закидывайте сюда
Собственно кроме свопа стека ничего магического нет. Это не магия компилятора, не изменение в языке, никаких новых ключевых слов или конструкций не появилось, а просто библиотечное расширение существующих API в JDK.

Есть ограничения, конечно, типа того, что нативный вызов требует реального треда (по очевидным причинам). Но такое, как я понимаю неизбежно и везде.

r> рано или поздно народ конечно разберет все на кусочки в статьях и докладах

Тут небольшая статья: https://blog.rockthejvm.com/ultimate-guide-to-java-virtual-threads/

r> как го и его шедуллер который затянули и в котлин и в раст как минимум

r> ну и в эршланге он там почти такой же только сильно наговнокоден
Нет никакого специального нового магического шедулера. Используется уже давно существующий ForkJoinPool.

Честно говоря, я сам ещё нигде это не пытался применить (вроде как уже доступно как preview), но по демкам в интернете выглядит хорошо.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.