java 绿色线程和虚拟线程有什么区别?

zrfyljdw  于 2022-12-02  发布在  Java
关注(0)|答案(1)|浏览(202)

根据https://en.wikipedia.org/wiki/Green_thread,* 绿色线程 * 已在Java 1.1中实现,并在后续的Java版本中被删除。
Java 19引入了 * 虚拟线程 * 作为预览特性。https://openjdk.org/jeps/425
这两个线程似乎都在用户空间工作,而不是像Java本地线程那样在内核空间工作。

它们之间有什么区别?新的虚拟线程是否忽略了绿色线程以前的限制?

zkure5ic

zkure5ic1#

简短答案:

绿色线程与操作系统线程具有N:1Map。所有绿色线程都在单个操作系统线程上运行。使用虚拟线程,多个虚拟线程可以在多个本机线程上运行(n:mMap)

JEP 425的更多细节

  • Java的绿色线程全部共享一个操作系统线程(M:1调度),并且最终被实现为操作系统线程(1:1调度) Package 器的平台线程(Java的本地线程)超越
  • 虚拟线程采用M:N调度,其中大量(M)的虚拟线程被调度为在较少数量(N)的OS线程上运行。

只是一个小概述

| 螺纹类型|项目名称|Map(Java线程类型:本机线程)|
| - -|- -|- -|
| 平台线程|只是操作系统线程的 Package 器。|一比一|
| 绿色线程|在单个操作系统线程上运行多个“绿色线程”。|1:无|
| 虚拟线程|在多个操作系统线程上运行多个虚拟线程|N:M(N〈M)|

来自JEP的完整报价

虚拟线程是由JDK而不是OS提供的线程的轻量级实现。它们是用户模式线程的一种形式,在其他多线程语言中已获得成功(例如Go语言中的goroutines和Erlang中的processes)。在Java的早期版本中,用户态线程甚至被称为“绿色线程”,那时操作系统线程还没有成熟和普及。然而,Java的绿色线程都共享一个操作系统线程(M:1调度),最终被平台线程超越,平台线程被实现为操作系统线程的 Package 器(1:1调度)。虚拟线程采用M:N调度,其中大量(M)虚拟线程被调度为在较少(N)操作系统线程上运行。

相关问题