cyn*_*nox 39 java multithreading
根据https://en.wikipedia.org/wiki/Green_thread 的说法,绿色线程已在 Java 1.1 中实现,并在后续 Java 版本中被删除。
Java 19 引入了虚拟线程作为预览功能。 https://openjdk.org/jeps/425
这两个线程似乎都在用户空间中工作,而不是像 Java 本机线程那样在内核空间中工作。
它们之间有什么区别?新的虚拟线程是否消除了绿色线程之前的限制?
Reg*_*Reg 48
绿色线程与操作系统线程具有 N:1 映射。所有绿色线程都在单个操作系统线程上运行。通过虚拟线程,多个虚拟线程可以在多个本机线程上运行(n:m 映射)
Java 的绿色线程都共享一个操作系统线程(M:1 调度),最终被作为操作系统线程包装器实现的平台线程(Java 的本机线程)超越(1:1 调度)
虚拟线程采用 M:N 调度,其中大量 (M) 虚拟线程被调度在较少数量 (N) 的操作系统线程上运行。
| 螺纹类型 | 描述 | Java 线程类型 (M) : 本机线程 (N) |
|---|---|---|
| 平台线程 | 操作系统线程的包装器。 | 1:1 |
| 绿色线程 | 在单个操作系统线程上运行多个“绿色线程”。 | 中号:1 |
| 虚拟线程 | 在多个操作系统线程上运行多个虚拟线程 | M:N (M > N) |
虚拟线程是 JDK 而不是操作系统提供的轻量级线程实现。它们是用户模式线程的一种形式,在其他多线程语言中已经取得了成功(例如,Go 中的 goroutine 和 Erlang 中的进程)。在 Java 的早期版本中,当操作系统线程尚未成熟和广泛使用时,用户模式线程甚至被称为所谓的“绿色线程”。然而,Java 的绿色线程都共享一个操作系统线程(M:1 调度),并且最终被作为操作系统线程包装器实现的平台线程所超越(1:1 调度)。虚拟线程采用 M:N 调度,其中大量 (M) 虚拟线程被调度在较少数量 (N) 的操作系统线程上运行。
| 归档时间: |
|
| 查看次数: |
4581 次 |
| 最近记录: |