gpt4 book ai didi

java - 了解java的 native 线程和jvm

转载 作者:IT老高 更新时间:2023-10-28 21:18:30 26 4
gpt4 key购买 nike

我知道 jvm 本身就是一个将 java 可执行文件的字节码转换为 native 机器码的应用程序,但是当使用 native 线程时,我有一些我似乎无法回答的问题。

  • 是否每个线程都创建自己的线程jvm 的实例来处理它们的具体执行?
  • 如果不是,那么 jvm 是否必须有某种方法来安排它接下来将处理哪个线程,如果是这样,由于一次只能运行一个线程,这不会使 java 的多线程特性变得无用吗?

最佳答案

Does every thread create their own instance of the JVM to handle their particular execution?

没有。它们在同一个 JVM 中执行,以便(例如)它们可以共享 static 字段的对象和值。


If not then does the JVM have to have some way to schedule which thread it will handle next

Java 中有两种线程实现。 native 线程被映射到由主机操作系统实现的线程抽象。操作系统负责本地线程调度和时间片。

第二种线程是“绿色线程”。这些由 JVM 本身实现和管理,JVM 实现线程调度。自 Java 1.2 以来,Sun/Oracle JVM 不再支持 Java 绿色线程实现。 (见 Green Threads vs Non Green Threads)


If so wouldn't this render the multi-threaded nature of Java useless since only one thread can be ran at a time?

我们现在谈论的是绿色线程,从 Java 的角度来看,这(仅)具有历史意义。

  • 绿色线程的优点是在非 I/O 情况下调度和上下文切换更快。 (基于在 Linux 2.2 上使用 Java 进行的测量;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.8.9238)

  • 使用纯绿色线程,N 个编程语言线程被映射到一个本地线程。正如您所指出的,在此模型中,您不会获得真正的并行执行。

  • 在混合线程实现中,N 个编程语言线程被映射到 M 个 native 线程(其中 N > M)。在此模型中,进程内线程调度程序负责将绿色线程调度到本地线程,并且您可以获得真正的并行执行(如果 M > 1);见 https://stackoverflow.com/a/16965741/139985 .

但即使使用纯绿色线程,您仍然可以获得并发性。控制被切换到另一个线程,一个线程在 I/O 操作上阻塞,获取锁等等。此外,JVM 的运行时可以实现周期性线程抢占,这样 CPU 密集型线程就不会独占(单个)内核而排斥其他线程

关于java - 了解java的 native 线程和jvm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2653458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com