【问题标题】:One to one mapping of Java Thread to Linux thread (LWP)Java Thread 到 Linux 线程 (LWP) 的一对一映射
【发布时间】:2013-06-15 15:20:43
【问题描述】:

Java Thread 对象和操作系统线程(轻量级进程)之间是否存在一对一的映射关系。也就是说,如果我有一个Thread 对象,我是否可以始终准确地识别一个关联的操作系统线程,并且我是否始终拥有相同的关联操作系统线程?一般来说,这取决于操作系统和 JVM,所以我将把问题限制在使用 Oracle 和 Open JDK JVM 的 Linux 上。

sleeping 或waiting 线程的情况如何?以及尚未开始运行的线程和已完成运行的线程的极端情况?

【问题讨论】:

  • Linux 并没有真正的“LWP”;所有执行线程都是用不同参数调用clone(2)的结果
  • 关于“我能始终准确地识别一个关联的操作系统线程吗”答案是肯定的;否则 Thread 保证无法兑现(考虑线程本地存储)
  • Java Threads 可以并且已经(绿色线程)在没有操作系统线程的情况下实现,因此操作系统线程不需要提供Thread 保证。

标签: java linux multithreading


【解决方案1】:

Java Thread 对象和 OS 线程之间是否存在一对一的映射关系(

是的,从 Java 1.2 开始就有。

在 Java 1.2 之前,使用“绿色线程”模型将多个 Java 线程映射到一个 OS 线程。

【讨论】:

  • 过去你当然可以在 linux 上使用绿色线程运行 JVM。
  • @PeterLawrey:AFAIK 也在 Linux 上,因为 Linux 本身上的早期线程模型不是基于 POSIX 线程,而是......其他一些设置成本相当高的东西。
  • 另请参阅相关问题的答案:stackoverflow.com/a/8569625/545127
  • 另请参阅相关问题的答案:stackoverflow.com/a/9934747/545127
猜你喜欢
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 2015-10-31
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多