JVM + Linux + Hyperthreading от Intel =

Я заметил, что потоки JVM по некоторым причинам запускаются как процессы в Linux (поправьте меня, если я ошибаюсь). Кроме того, фактом является то, что Intel Hyperthreading обеспечивает дополнительное распараллеливание только для двух потоков, принадлежащих одному и тому же процессу.

Означает ли это, что одна многопоточная программа JVM не будет выигрывать от Hyperthreading в Linux, потому что ее потоки не являются потоками с «точки зрения» ЦП?


person java.is.for.desktop    schedule 26.11.2011    source источник
comment
Насколько я понимаю, потоки JVM в Linux — это просто собственные потоки, а не процессы. Я не думаю, что JVM-потоки-как-процессы какое-то время были правдой.   -  person Gian    schedule 26.11.2011


Ответы (2)


Процессы и потоки не обрабатываются планировщиком в Linux по-разному. Существует ряд ресурсов, которые могут использоваться совместно процессами, что определяется системным вызовом clone. Потоки и процессы в том виде, в котором они обычно используются, — это просто названия часто используемых рецептов.

Если вы рассматриваете потоки как процессы в JVM, это просто смешение номенклатуры. По обычному определению, если процессы совместно используют виртуальное адресное пространство, то они являются «потоками» внутри процесса.

Все аппаратное планирование выиграет от гиперпоточности, независимо от используемой терминологии. Также, чтобы быть полностью честным, гиперпоточность не позволяет вам запускать больше потоков параллельно: она ускоряет переключение контекста, давая процессам больше времени выполнения.

person Matt Joiner    schedule 26.11.2011

«Потоки JVM работают как процессы в Linux». Нет, они работают как LWP (облегченный процесс).

Потоки Java внутренне реализованы как собственные потоки, то есть LWP (в Linux), и вы можете увидеть их, используя ps -eLf. Хотя сопоставление между собственным потоком и потоком java затруднено. Единственный поток, который можно легко сопоставить, — это основной поток, поскольку его идентификатор будет таким же, как идентификатор процесса.

JVM определенно выиграет от HT.
Из статьи о HT в Java:

SMT обещает значительно повысить производительность Java на стороне сервера за счет более полного использования существующих циклов процессора в многопоточных приложениях.

person Suraj Chandran    schedule 26.11.2011