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