Потоки Java реального времени и потоки уровня ОС в Linux

При использовании Java-потоков в реальном времени (либо RealtimeThread или же NoHeapRealtimeThread), есть ли отношение 1 к 1 между потоками уровня ОС и потоками Java? Кроме того, Java использует fork() или clone() для каждого из процессов, созданных на уровне ОС?

3 ответа

Поток Java в Linux зависит от версии, но большинство современных реализаций используют pthread, поток для Linux, а не процесс. поток linux также известен как облегченные процессы, которые генерируются не вызовом fork, а вызовом pthread. Потоки работают под одним и тем же процессом и могут совместно использовать определенные ресурсы.

Да, они имеют отношение 1 к 1, (ps -Lf), но действительно трудно определить, какой именно, поскольку идентификатор потока os является магическим числом, которое знает только jvm.

Статья ниже должна помочь.

http://linuxprograms.wordpress.com/2007/12/19/linux-kernel-support-for-threads-light-weight-processe/

Java использует fork() или clone() для каждого из процессов, созданных на уровне ОС?

Если вы имеете в виду процессы, созданные Runtime.exec(), он должен использовать fork(). Если вы все еще ссылаетесь на потоки, он не может использовать fork(), поскольку потоки не являются процессами.

Из того, что я видел на RedHat 3.x - 5.x с Sun/Oracle JVM, это процесс одной ОС на каждый поток Java. Не знаю насчет вилки против клона.

Другие вопросы по тегам