Мне действительно любопытно на предмет того, как делает работу JVM с потоками! В моих поисках в Интернете я нашел некоторый материал о RTSJ, но я не знаю, являются ли это правильные направления для моих ответов. Я также нашел эту тему на форумах солнца, http://forums.sun.com/thread.jspa?forumID=513&threadID=472453, но это не удовлетворительно.
Кто-то может дать мне некоторые направления, материал, статьи или предложение об алгоритме планирования JVM?
Я также ищу информацию о конфигурациях по умолчанию потоков Java в планировщике, как 'сколько времени занимает для каждого потока' в случае квантования времени. И этот материал.
Я ценил бы любую справку!
Спасибо!
Не существует единой виртуальной машины Java; JVM - это спецификация, и существует множество ее реализаций, включая версию OpenJDK и версию Sun, среди прочих. Я не знаю наверняка, но я бы предположил, что любая разумная JVM будет просто использовать базовый механизм потоков, предоставляемый ОС, что подразумевает POSIX Threads (pthreads) в UNIX (Mac OS X, Linux и т.д.) и подразумевает WIN32 threads в Windows. Как правило, в этих системах по умолчанию используется стратегия round-robin.
Некоторое время назад я написал несколько статей о планировании потоков с точки зрения Java. Однако на основных платформах поведение потоков в основном зависит от базовой системы потоков ОС.
Посмотрите, в частности, мою страницу о том, что такое приоритет потоков Java, где объясняется, как уровни приоритетов Java соотносятся с приоритетами потоков ОС, и как на практике ведут себя потоки с разными приоритетами в Linux и Windows. Основное обсуждаемое различие заключается в том, что в Linux существует более тесная связь между приоритетом потока и долей CPU, выделяемой потоку, в то время как в Windows это не так (см. графики).
Это не так. JVM использует собственные потоки операционной системы, поэтому планированием занимается ОС, а не JVM.