【问题标题】:Real Time Java threads and OS Level threads on LinuxLinux 上的实时 Java 线程和操作系统级线程
【发布时间】:2011-05-09 01:12:26
【问题描述】:

当使用实时 Java 线程(RealtimeThreadNoHeapRealtimeThread)时,操作系统级别线程和 Java 线程之间是否存在一对一的关系?此外,Java 是否对在 OS 级别创建的每个进程使用 fork() 或 clone()?

【问题讨论】:

    标签: java real-time-java linuxthreads


    【解决方案1】:

    Linux 上的 Java 线程取决于版本,但大多数现代实现使用 pthread,Linux 的线程,而不是真正的进程。 linux线程也被称为轻量级进程,它不是由fork调用生成的,而是由pthread调用生成的。线程在同一个进程下运行,并且可以共享一定的资源。

    是的,它们是一对一的关系,(ps -Lf),但是很难找出哪个是哪个,因为 os 线程 id 是一个只有 jvm 知道的幻数。

    下面的文章应该会有所帮助。

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

    【讨论】:

      【解决方案2】:

      是使用 fork() 或 clone() 的 Java 在创建的每个进程 操作系统级别?

      如果你指的是由 Runtime.exec() 创建的进程,它必须使用 fork()。如果您仍然指代线程,则它不能使用 fork(),因为线程不是进程。

      【讨论】:

        【解决方案3】:

        根据我在使用 Sun/Oracle JVM 的 RedHat 3.x - 5.x 上看到的情况,每个 Java 线程都有一个操作系统进程。不过不知道分叉与克隆。

        【讨论】:

        • 我想你可能会对ps 告诉你的内容感到困惑。每个线程肯定不是一个“进程”,因为进程不共享地址空间。 (不……Java 也不使用共享内存来执行此操作。)
        • 一些 人称线程为轻量级进程,但这是为了将它们与常规(重量级)进程区分开来。正确的 (1) 术语是操作系统或本机线程……如果您开始称它们为进程,人们会感到困惑。 (1 正确 == 操作系统文档称它们为...)
        最近更新 更多