2010-04-16 5 views
20

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

  • Создает ли каждая нить своего собственный экземпляра JVM для обработки их конкретного исполнения?
  • Если нет, то у jvm должен быть какой-то способ запланировать, какой поток он будет обрабатывать дальше, если бы это не изменило бы многопоточную природу java бесполезно, так как только один поток можно было запустить за раз?

ответ

22

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

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

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

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

Второй вид нити - «зеленые нити». Они реализуются и управляются самой JVM, при этом JVM реализует планирование потоков. Реализация зеленых потоков больше не поддерживается Sun JVMs, AFAIK.

1

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

8

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

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

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

Да, виртуальная машина имеет планировщик потоков. Существует множество различных алгоритмов планирования потоков, и один из них зависит от JVM-поставщика. (Scheduling вообще интересная тема.)

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

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

+0

«Да, у JVM есть планировщик потоков. Существует много разных алгоритмов для планирования потоков, и какой из них используется JVM-зависимым от поставщика» Я думаю, что здесь вводит в заблуждение, потому что если потоки Java создают родной нить (не зеленые потоки), тогда JVM не нуждается в расписании или не планирует, потому что ОС выполняет это через контекстное переключение. Я прав? Пожалуйста, поправьте меня, если я ошибаюсь. – PeerNet

4

Нить Java может отображаться один-к-одному в поток ядра. Но это не должно быть так. Могут быть n потоков ядра, выполняющих m java threads, где m может быть намного больше n, а n должно быть больше числа процессоров. Сама JVM запускает n потоков ядра, и каждый из них выбирает поток java и запускает его некоторое время, а затем переключается на другой поток java. Операционная система выбирает потоки ядра и назначает их процессору. Таким образом, планирование потоков может выполняться на нескольких уровнях. Вам может быть интересно посмотреть язык программирования GO, где тысячи так называемых «Goroutines» работают десятками потоков.

+0

AFAIK Неточная информация. Потоки JVM отображают 1: 1 с родной ОС. Можете ли вы показать пример достижения m: n mapping? –

+0

@PiyushKatariya - Я думаю, что это специфичная платформа. Например, вся версия до Java 9 из Sun/Oracle Java для Solaris поддерживает сопоставление потоков N в M: http://reins.altervista.org/java/Java_and_Solaris_Threading.htm –

Смежные вопросы