Потоки 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.
Статья ниже должна помочь.
Java использует fork() или clone() для каждого из процессов, созданных на уровне ОС?
Если вы имеете в виду процессы, созданные Runtime.exec(), он должен использовать fork(). Если вы все еще ссылаетесь на потоки, он не может использовать fork(), поскольку потоки не являются процессами.
Из того, что я видел на RedHat 3.x - 5.x с Sun/Oracle JVM, это процесс одной ОС на каждый поток Java. Не знаю насчет вилки против клона.