Делает JVM, или базовая ОС обрабатывают изменения состояния потока

То, когда я создаю многопоточную программу, и я использую методы те, которые Ожидают или Сигнал управлять потоками среди прочего, делает управление JVM все изменения состояния потока или делает базовую ОС, имеют какое-либо отношение к нему.

5
задан Julian 17 December 2009 в 08:03
поделиться

3 ответа

Это зависит от реализации JVM. Большинство современных JVM (Suns HotSpot, Oracles JRockit, IBM VM) будут использовать модель потоковой передачи операционной системы, поскольку это даст наилучшую производительность.

Ранние реализации использовали зеленые потоки - виртуальная машина моделировала потоки, используя себя. Обычно это использовалось, когда платформа или операционная система, на которой он работал, не поддерживали потоки. Например, в Java 1.1 Зеленые нити использовались в Solaris. В то время обычным шаблоном использования нескольких ядер / ЦП в Solaris было использование нескольких процессов - только позже в операционную систему были добавлены потоки.

Спецификация языка Java не определяет, как потоки должны быть реализованы, но в целом, если ОС поддерживает многопоточность, современные JVM будут использовать реализацию ОС. Когда в ОС нет поддержки, например, на мобильных телефонах низкого уровня или в реализации Java Card, например, среда выполнения будет использовать Green Threads.

если ОС поддерживает многопоточность, современные JVM будут использовать реализацию ОС. Когда в ОС нет поддержки, например, на мобильных телефонах низкого уровня или в реализации Java Card, например, среда выполнения будет использовать Green Threads.

если ОС поддерживает многопоточность, современные JVM будут использовать реализацию ОС. Когда в ОС нет поддержки, например, на мобильных телефонах низкого уровня или в реализации Java Card, например, среда выполнения будет использовать Green Threads.

11
ответ дан 18 December 2019 в 10:45
поделиться

In general, Java threads will map to OS threads and Java will make use of OS synchronisation primitives to implement synchronized/wait/signal/..., but the mapping is not as straightforward as you might think. In fact, the JVM uses some clever tricks to improve performance and implements as much of the synchronisation code itself (at least the uncontended case).

If you are really interested in the details, have a look at the JVM source code or at cmeerw.org/notes/java_sync.html which provides some overview of how Java's synchronisation primitives are implemented on Linux and Solaris.

3
ответ дан 18 December 2019 в 10:45
поделиться

В первые дни Linux 2.4, по крайней мере, IBM JVM использовала отдельные процессы для реализации потоков Java. Это приводило к длительному переключению между потоками, поскольку системе каждый раз приходилось активировать совершенно другой процесс.

2
ответ дан 18 December 2019 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: