Сообщение Re[5]: Киллер фича JDK 21 - virtual threads от 09.05.2023 17:47
Изменено 09.05.2023 17:49 ·
Re[5]: Киллер фича JDK 21 - virtual threads
Здравствуйте, vsb, Вы писали:
P>>Каким образом джава узнает, что вон тот метод у нас работает долго и при его вызове надо бы перешедулить?
vsb>Насколько я понимаю — никаким. Вечный цикл займёт тред навсегда. И если треды кончатся, то всё встанет колом (в отличие от настоящих потоков).
Тут немного не так. Точнее совсем не так.
Если бесконечный цикл — ошибка в коде, то виртуальный тред займёт настоящий и никакому другому виртуальному треду больше не отдаст, будет жрать cpu. По сути виртуальный тред как бы выродится в настоящий. Т.е. это утечка ресурса.
Если это просто некий временный load burst и большое число виртуальных тредов начнёт чего-то усердно считать, то они начнут захапывать реальные треды из пула. И там уже от настроек пула зависит. Например, пул может пытаться неограниченно создавать новые реальные треды пока память не закончится или ОС не начнёт протестовать. По дефолту пул, вроде, ограничивается числом ядер в cpu.
Т.е. всё как настоящие потоки получается. Плохая кооперация виртуальных тредов тупо вырождает их в настоящие. Единственное, что пропадает fairness — те виртуальные треды которые захапали настоящие и настоящие кончились, остальным виртуальным тредам ничего не достанется, пока те не начнут отдавать захапанное.
P>>Каким образом джава узнает, что вон тот метод у нас работает долго и при его вызове надо бы перешедулить?
vsb>Насколько я понимаю — никаким. Вечный цикл займёт тред навсегда. И если треды кончатся, то всё встанет колом (в отличие от настоящих потоков).
Тут немного не так. Точнее совсем не так.
Если бесконечный цикл — ошибка в коде, то виртуальный тред займёт настоящий и никакому другому виртуальному треду больше не отдаст, будет жрать cpu. По сути виртуальный тред как бы выродится в настоящий. Т.е. это утечка ресурса.
Если это просто некий временный load burst и большое число виртуальных тредов начнёт чего-то усердно считать, то они начнут захапывать реальные треды из пула. И там уже от настроек пула зависит. Например, пул может пытаться неограниченно создавать новые реальные треды пока память не закончится или ОС не начнёт протестовать. По дефолту пул, вроде, ограничивается числом ядер в cpu.
Т.е. всё как настоящие потоки получается. Плохая кооперация виртуальных тредов тупо вырождает их в настоящие. Единственное, что пропадает fairness — те виртуальные треды которые захапали настоящие и настоящие кончились, остальным виртуальным тредам ничего не достанется, пока те не начнут отдавать захапанное.
Re[5]: Киллер фича JDK 21 - virtual threads
Здравствуйте, vsb, Вы писали:
P>>Каким образом джава узнает, что вон тот метод у нас работает долго и при его вызове надо бы перешедулить?
vsb>Насколько я понимаю — никаким. Вечный цикл займёт тред навсегда. И если треды кончатся, то всё встанет колом (в отличие от настоящих потоков).
Тут немного не так. Точнее совсем не так.
Если бесконечный цикл — ошибка в коде, то виртуальный тред займёт настоящий и никакому другому виртуальному треду больше не отдаст, будет жрать cpu. По сути виртуальный тред как бы выродится в настоящий. Т.е. это утечка ресурса.
Если это просто некий временный load burst и большое число виртуальных тредов начнёт чего-то усердно считать, то они начнут захапывать реальные треды из пула. И там уже от настроек пула зависит. Например, пул может пытаться неограниченно создавать новые реальные треды пока память не закончится или ОС не начнёт протестовать. По дефолту пул, вроде, ограничивается числом ядер в cpu.
Т.е. всё как настоящие потоки получается. Плохая кооперация виртуальных тредов тупо вырождает их в настоящие. Единственное, что пропадает fairness — те виртуальные треды которые захапали все настоящие, то остальным виртуальным тредам ничего не достанется, пока те не начнут отдавать захапанное.
P>>Каким образом джава узнает, что вон тот метод у нас работает долго и при его вызове надо бы перешедулить?
vsb>Насколько я понимаю — никаким. Вечный цикл займёт тред навсегда. И если треды кончатся, то всё встанет колом (в отличие от настоящих потоков).
Тут немного не так. Точнее совсем не так.
Если бесконечный цикл — ошибка в коде, то виртуальный тред займёт настоящий и никакому другому виртуальному треду больше не отдаст, будет жрать cpu. По сути виртуальный тред как бы выродится в настоящий. Т.е. это утечка ресурса.
Если это просто некий временный load burst и большое число виртуальных тредов начнёт чего-то усердно считать, то они начнут захапывать реальные треды из пула. И там уже от настроек пула зависит. Например, пул может пытаться неограниченно создавать новые реальные треды пока память не закончится или ОС не начнёт протестовать. По дефолту пул, вроде, ограничивается числом ядер в cpu.
Т.е. всё как настоящие потоки получается. Плохая кооперация виртуальных тредов тупо вырождает их в настоящие. Единственное, что пропадает fairness — те виртуальные треды которые захапали все настоящие, то остальным виртуальным тредам ничего не достанется, пока те не начнут отдавать захапанное.