#java #real-time-java #linuxthreads
#java #в реальном времени-java #linuxthreads
Вопрос:
Существует ли соотношение 1 к 1 между потоками уровня ОС и потоками Java при использовании потоков Java реального времени ( RealtimeThread
или NoHeapRealtimeThread
)? Кроме того, использует ли Java fork() или clone() для каждого из процессов, созданных на уровне ОС?
Ответ №1:
Поток Java в Linux зависит от версии, но большинство современных реализаций используют pthread , поток для Linux, на самом деле не процесс. поток Linux также известен как облегченные процессы, которые генерируются не вызовом fork, а скорее вызовом pthread. Потоки выполняются в рамках одного процесса и могут совместно использовать определенные ресурсы.
Да, они имеют отношение 1 к 1 (ps -Lf), но действительно сложно определить, что есть что, поскольку идентификатор потока ос — это магическое число, известное только jvm.
Приведенная ниже статья должна помочь.
Ответ №2:
использует ли Java fork() или clone() для каждого из процессов, созданных на уровне ОС?
Если вы имеете в виду процессы, созданные Runtime.exec(), он должен использовать fork(). Если вы все еще ссылаетесь на потоки, он не может использовать fork (), поскольку потоки не являются процессами.
Ответ №3:
Из того, что я видел на RedHat 3.x — 5.x с Sun / Oracle JVM, это один процесс операционной системы на поток Java. Хотя я не знаю о fork против clone.
Комментарии:
1. Я думаю, вас может смутить то, что
ps
вам говорят. Это, конечно, НЕ один «процесс» на поток, потому что процессы не разделяют адресные пространства. (И нет … Java также не использует общую память для этого.)2. некоторые люди называют потоки легковесными процессами, но это для того, чтобы отличать их от обычных (тяжеловесных) процессов. Правильный (1) термин — ОС или собственный поток … и если вы начнете называть их процессами, люди запутаются. (1 Правильно == как их называет документация ОС …)