【发布时间】:2011-05-09 01:12:26
【问题描述】:
当使用实时 Java 线程(RealtimeThread 或 NoHeapRealtimeThread)时,操作系统级别线程和 Java 线程之间是否存在一对一的关系?此外,Java 是否对在 OS 级别创建的每个进程使用 fork() 或 clone()?
【问题讨论】:
标签: java real-time-java linuxthreads
当使用实时 Java 线程(RealtimeThread 或 NoHeapRealtimeThread)时,操作系统级别线程和 Java 线程之间是否存在一对一的关系?此外,Java 是否对在 OS 级别创建的每个进程使用 fork() 或 clone()?
【问题讨论】:
标签: java real-time-java linuxthreads
Linux 上的 Java 线程取决于版本,但大多数现代实现使用 pthread,Linux 的线程,而不是真正的进程。 linux线程也被称为轻量级进程,它不是由fork调用生成的,而是由pthread调用生成的。线程在同一个进程下运行,并且可以共享一定的资源。
是的,它们是一对一的关系,(ps -Lf),但是很难找出哪个是哪个,因为 os 线程 id 是一个只有 jvm 知道的幻数。
下面的文章应该会有所帮助。
【讨论】:
是使用 fork() 或 clone() 的 Java 在创建的每个进程 操作系统级别?
如果你指的是由 Runtime.exec() 创建的进程,它必须使用 fork()。如果您仍然指代线程,则它不能使用 fork(),因为线程不是进程。
【讨论】:
根据我在使用 Sun/Oracle JVM 的 RedHat 3.x - 5.x 上看到的情况,每个 Java 线程都有一个操作系统进程。不过不知道分叉与克隆。
【讨论】:
ps 告诉你的内容感到困惑。每个线程肯定不是一个“进程”,因为进程不共享地址空间。 (不……Java 也不使用共享内存来执行此操作。)