Jav*_*ice 2 java-threads project-loom
在早期的 Java 版本中,JVM 线程与本机操作系统线程复用。此类线程被称为“绿色线程”。这在 Java 的早期版本中已被弃用,每个 Java 线程都对应一个操作系统线程。
然而,在 Project Loom 中,执行上下文不再是线程,而是可以执行代码的“某个”对象。但它仍然必须多路复用到本机线程才能执行,不是吗?如果是这样的话,对我来说,这看起来像是回到了绿色线程。
我很确定我错过了一些我想知道它是什么的东西。我可以得到一些帮助吗?
绿色线程是一种在根本不支持本机多线程的系统上支持多线程的解决方案。在这样的系统中,单个阻塞调用将阻塞整个进程,从而阻塞所有线程。此外,无法将 SMP 功能与绿色线程结合使用。
\n虽然在概念上是相关的,但在没有多线程支持的系统上的 n:1 线程和在支持多线程的系统上的 n:m 线程在代码方面看起来完全不同。
\n对于 Loom 项目的虚拟线程来说更是如此,因为它可以解决当时不存在的 Java 端线程池实现。所以虚拟线程功能的很大一部分已经用Java实现了。
\n虚拟线程仍然可以使用 SMP,因为它们的执行被委托给根据 CPU 核心数量定制的平台线程池。当平台线程即将被阻塞时,可以启动新的平台线程,以保持并行处理能力。但实现者还花费了精力将阻塞操作重新实现为非阻塞,因此平台线程只会将虚拟线程置于阻塞或等待状态,然后继续执行下一个可运行的虚拟线程。
\n当然,Java\xe2\x80\x99s 多线程一直可以朝这个方向发展(所以它看起来像是绿色线程的扩展)。该规范始终允许 Java 线程到平台线程的 n:m 映射。但这是一条未曾走过的路。如果当时尝试的话,结果很可能会与 Loom 项目完全不同。
\n| 归档时间: |
|
| 查看次数: |
378 次 |
| 最近记录: |