Киллер фича JDK 21 - virtual threads
От: · Великобритания  
Дата: 04.05.23 21:13
Оценка: 59 (6) :)
В сентябре обещают зарелизить JEP 444

Можно писать простой код и запускать его на миллионе тредов. Никакой колбасы async, корутин и других CPS ужасов. Обычный плоский код.
Кооперативная многозадачность. Виртуальные треды запускаются на пуле из ОС-тредов и на блокирующих операциях перешедулятся, стеки подменяются.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Киллер фича JDK 21 - virtual threads
От: σ  
Дата: 04.05.23 21:25
Оценка:
·>Кооперативная многозадачность. Виртуальные треды запускаются на пуле из ОС-тредов и на блокирующих операциях перешедулятся, стеки подменяются.
А вот в ирланге preemption есть
  Скрытый текст
вроде
Re: Киллер фича JDK 21 - virtual threads
От: reversecode google
Дата: 04.05.23 21:40
Оценка:
ну так тоже самое что и в го
только а эрлашланге еще и на каждом атоме перешедулинг вроде как есть
Re[2]: Киллер фича JDK 21 - virtual threads
От: · Великобритания  
Дата: 04.05.23 22:10
Оценка:
Здравствуйте, reversecode, Вы писали:

r> ну так тоже самое что и в го

В го это специальные языковые конструкции типа go, chan, прибито гвоздями. virtual threads это обычная многопоточка — хочешь локи, хочешь латчи, блокирующие очереди, и т.п.

r> только а эрлашланге еще и на каждом атоме перешедулинг вроде как есть

Там вообще эти жуткие акторы, иммутабельные сообщения только. Взять и и тупо расшарить данные между тредами — фигушки.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Киллер фича JDK 21 - virtual threads
От: · Великобритания  
Дата: 04.05.23 23:25
Оценка:
Здравствуйте, σ, Вы писали:

σ> ·>Кооперативная многозадачность. Виртуальные треды запускаются на пуле из ОС-тредов и на блокирующих операциях перешедулятся, стеки подменяются.

σ> А вот в ирланге preemption есть
  Скрытый текст
вроде

Там с перформансом не всё радужно. И акторы... сомнительное удовольствие.
Виртуальные треды это про асинхронное выполнение простого синхронного кода, скорее.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: Киллер фича JDK 21 - virtual threads
От: reversecode google
Дата: 05.05.23 07:32
Оценка: :)
не совсем понятно в техническом плане что там они такого сделали
если в эршланге вытесняющий атом то в яве сделали каждую инструкцию что ли
ну т.е. как в обычном cpu где ОС каждый поток может прервать в любой момент
времени разбираться нет
так что если будет инфа о технических подробностях, закидывайте сюда

рано или поздно народ конечно разберет все на кусочки в статьях и докладах
как го и его шедуллер который затянули и в котлин и в раст как минимум
ну и в эршланге он там почти такой же только сильно наговнокоден
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
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: Киллер фича JDK 21 - virtual threads
От: σ  
Дата: 05.05.23 08:35
Оценка:
R>не совсем понятно в техническом плане что там они такого сделали
R>если в эршланге вытесняющий атом то в яве сделали каждую инструкцию что ли
R>ну т.е. как в обычном cpu где ОС каждый поток может прервать в любой момент
R>времени разбираться нет
R>так что если будет инфа о технических подробностях, закидывайте сюда

В ЖЕПе написано что time sharing нет, вытеснение на блокирующихся операциях
Re[5]: Киллер фича JDK 21 - virtual threads
От: reversecode google
Дата: 05.05.23 08:53
Оценка:
ну тогда так как я и сказал
го тоже вытесняет на блокирующих вызовах
плюс еще и на каждых вызовах любой его функции
Re: Киллер фича JDK 21 - virtual threads
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 08.05.23 10:49
Оценка:
Здравствуйте, ·, Вы писали:

·>Кооперативная многозадачность. Виртуальные треды запускаются на пуле из ОС-тредов и на блокирующих операциях перешедулятся, стеки подменяются.

Получается, так к какому-то варианту зелёных потоков которые были в первых джавах и вернулись?
Sic luceat lux!
Re[2]: Киллер фича JDK 21 - virtual threads
От: · Великобритания  
Дата: 08.05.23 13:12
Оценка:
Здравствуйте, Kernan, Вы писали:

K>·>Кооперативная многозадачность. Виртуальные треды запускаются на пуле из ОС-тредов и на блокирующих операциях перешедулятся, стеки подменяются.

K>Получается, так к какому-то варианту зелёных потоков которые были в первых джавах и вернулись?
Ну как бы не совсем. Зелёные потоки — это все потоки VM работают на одном реальном потоке и всё. А тут эти треды можно шедулить как душе угодно. Это альтернатива await/asynс, actors, корутин и прочего.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: Киллер фича JDK 21 - virtual threads
От: Pavel Dvorkin Россия  
Дата: 08.05.23 13:33
Оценка:
Здравствуйте, ·, Вы писали:

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


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

·>Сами стеки — это маленькие кусочки порядка сотни байт.

Можно короче объяснить : если взять Win 16 и добавить работу на нескольких ядрах, то оно и получится. Только там в качестве потоков были задачи.
With best regards
Pavel Dvorkin
Re[2]: Киллер фича JDK 21 - virtual threads
От: vsb Казахстан  
Дата: 08.05.23 13:44
Оценка:
Здравствуйте, Kernan, Вы писали:

K>·>Кооперативная многозадачность. Виртуальные треды запускаются на пуле из ОС-тредов и на блокирующих операциях перешедулятся, стеки подменяются.

K>Получается, так к какому-то варианту зелёных потоков которые были в первых джавах и вернулись?

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

Как там эти потоки в жаве работали в те древние времена, мне самому интересно. В линуксе потоки в принципе были своеобразные тогда, не такие, как сейчас. На солярисе вроде жава умела в полноценные зелёные потоки, которые выполнялись на куче ОС потоков. На винде хз.
Отредактировано 08.05.2023 13:44 vsb . Предыдущая версия .
Re[3]: Киллер фича JDK 21 - virtual threads
От: SkyDance Земля  
Дата: 08.05.23 16:29
Оценка:
·>Там вообще эти жуткие акторы, иммутабельные сообщения только. Взять и и тупо расшарить данные между тредами — фигушки.

Именно это и позволяет практически неограниченную масштабируемость, а также многие другие ценные штуки вроде прямого запрета девелоперу выстрелить себе в ногу.

Но для начального освоения требуется чуть больше шевелить мозгами, что мешает популярности.
Re[6]: Киллер фича JDK 21 - virtual threads
От: · Великобритания  
Дата: 08.05.23 17:00
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

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

PD>·>Сами стеки — это маленькие кусочки порядка сотни байт.
PD>Можно короче объяснить : если взять Win 16 и добавить работу на нескольких ядрах, то оно и получится. Только там в качестве потоков были задачи.
Честно говоря я не знаю как win16 работало и уж тем более внутренности. Но полагаю задачи надо хитрым образом описывать. Тут же обыкновенный плоский код плюс кучу видов многопоточных паттернов взаимодействия только из коробки — locks, cond-vars, latches, exchange, futures, concurrent collections, етс.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: Киллер фича JDK 21 - virtual threads
От: · Великобритания  
Дата: 08.05.23 17:02
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>·>Там вообще эти жуткие акторы, иммутабельные сообщения только. Взять и и тупо расшарить данные между тредами — фигушки.

SD>Именно это и позволяет практически неограниченную масштабируемость, а также многие другие ценные штуки вроде прямого запрета девелоперу выстрелить себе в ногу.
SD>Но для начального освоения требуется чуть больше шевелить мозгами, что мешает популярности.
В этом и прикол, что сабж позволяет то же, но без высокого порога вхождения.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Киллер фича JDK 21 - virtual threads
От: reversecode google
Дата: 08.05.23 19:20
Оценка: :)
зеленые потоки которые вернули в яву и размазал на форк джин пуле
https://blog.rockthejvm.com/ultimate-guide-to-java-virtual-threads/
как оказывается форк джоин пул явовский уже умеет ворк стилинг
а именно вокруг него и прыгали разрабы токио пытаясь его слизать с го
а потом и в котлине итд скомуниздили

в чем то, это тоже самое что сделали в расте, только в расте это стеклесс корутины

жаль не удалось нагуглить(https://github.com/openjdk/) сами изменения которые внесены в jvm и sdk
но поверхностно теперь понятно
Re[5]: Киллер фича JDK 21 - virtual threads
От: SkyDance Земля  
Дата: 08.05.23 20:12
Оценка:
·>В этом и прикол, что сабж позволяет то же, но без высокого порога вхождения.

Порог вхождения в Java на самом деле намного выше.
Спасает только sunk cost, то, что люди уже потратили годы (начиная со школы, или самостоятельного изучения). В Британии мне понравилось, что некоторые профессоры в их министерство образования пытаются продвинуть чуть более разнообразные программы. Чтобы у детей было понимание других вариантов, кроме императивщины и прочих лого-бейсиков. От которых, понятное дело, путь в Джаву проще, чем в функциональные языки.
Re[2]: Киллер фича JDK 21 - virtual threads
От: · Великобритания  
Дата: 08.05.23 20:53
Оценка:
Здравствуйте, reversecode, Вы писали:

r> а именно вокруг него и прыгали разрабы токио пытаясь его слизать с го

Что за токио?

r> жаль не удалось нагуглить(https://github.com/openjdk/) сами изменения которые внесены в jvm и sdk

https://github.com/openjdk/jdk/pull/13203
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: Киллер фича JDK 21 - virtual threads
От: reversecode google
Дата: 08.05.23 20:56
Оценка:
https://tokio.rs/blog/2019-10-scheduler
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.