Понимание собственных потоков Java и jvm

Я понимаю, что jvm является самостоятельно приложением, которое превращает байт-код исполняемого файла Java в собственный машинный код, но при использовании собственных потоков у меня есть некоторые вопросы, на которые я просто, может казаться, не отвечаю.

  • Каждый поток создает их собственный экземпляр jvm для обработки их конкретного выполнения?
  • Если не затем jvm должен иметь некоторый способ запланировать, какой поток он обработает затем, раз так разве это не представило бы многопоточную природу Java, бесполезного, так как только один поток может быть, работал за один раз?
30
задан Traker 16 April 2010 в 14:01
поделиться

3 ответа

Создает ли каждый поток свой собственный экземпляр JVM для обработки своего конкретного выполнения?

Нет. Они выполняются в одной JVM, так что (например) они могут совместно использовать объекты и атрибуты классов.


Если нет, тогда у JVM должен быть какой-то способ запланировать, какой поток она будет обрабатывать следующим

В Java есть два типа реализации потоков. Собственные потоки отображаются в абстракцию потока, которая реализуется ОС хоста. ОС заботится о собственном планировании потоков и квантовании времени.

Второй вид ниток - это «зеленые нити». Они реализуются и управляются самой JVM, при этом JVM реализует планирование потоков. Реализации зеленых потоков Java не поддерживаются JVM Sun / Oracle начиная с версии Java 1.2. (См. Зеленые потоки против не зеленых потоков )


Если так, разве это не сделает многопоточную природу Java бесполезной, поскольку одновременно может выполняться только один поток?

Мы говорим о зеленых нитях сейчас, и это представляет исторический интерес (только) с точки зрения Java.

  • Зеленые потоки имеют то преимущество, что планирование и переключение контекста выполняются быстрее в случае отсутствия ввода-вывода. (На основе измерений, выполненных с помощью Java в Linux 2.2; http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.8.9238 )

  • С чисто зелеными нитями, N потоки языка программирования отображаются в один собственный поток. Как вы заметили, в этой модели вы не получите истинного параллельного выполнения.

  • В реализации гибридного потока N потоков языка программирования отображаются на M собственных потоков (где N> M).В этой модели планировщик внутрипроцессного потока отвечает за зеленый поток для планирования собственных потоков, И вы получаете истинное параллельное выполнение (если M> 1); см. https://stackoverflow.com/a/16965741/139985 .

Но даже с чисто зелеными потоками вы все равно получаете параллелизм. Управление передается другим потокам, поток блокирует операцию ввода-вывода, получает блокировку и т. Д. Кроме того, среда выполнения JVM может реализовать периодическое вытеснение потоков, чтобы поток, интенсивно использующий ЦП, не монополизировал (одно) ядро, исключая другие потоки

30
ответ дан 28 November 2019 в 00:04
поделиться

Создает ли каждый поток свой собственный экземпляр jvm для обработки своего конкретного выполнения?

Нет, ваше приложение, работающее в JVM, может иметь много потоков, которые все существуют в этом экземпляре JVM.

Если нет, то у jvm должен быть какой-то способ запланировать, какой поток он будет обрабатывать следующим ...

Да, JVM имеет планировщик потоков. Существует множество различных алгоритмов планирования потоков, и какой из них используется, зависит от поставщика JVM. ( Планирование в целом является интересной темой.)

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

Я не уверен, что понимаю эту часть вашего вопроса. Это своего рода точка заправки. Как правило, у вас больше потоков, чем процессоров, и вы хотите запускать более одного объекта одновременно. Многопоточность позволяет вам использовать все преимущества вашего процессора, убедившись, что он занят обработкой одного потока, в то время как другой ожидает ввода-вывода или по какой-либо другой причине не занят.

8
ответ дан 28 November 2019 в 00:04
поделиться

Потоки Java отображаются на собственные потоки ОС. Они не имеют ничего общего с самой JVM.

2
ответ дан 28 November 2019 в 00:04
поделиться
Другие вопросы по тегам:

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