【问题标题】:Difference between green threads and virtual threads绿色线程和虚拟线程的区别
【发布时间】:2022-12-01 17:10:22
【问题描述】:

绿线根据https://en.wikipedia.org/wiki/Green_thread,已使用 Java 1.1 实现并在后续 Java 版本中删除。

引入 Java 19虚拟线程作为预览功能。 https://openjdk.org/jeps/425

这两个线程似乎都在用户空间中工作,而不是像 Java 本地线程那样在内核空间中工作。

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

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    简短回答:

    Green Threads 与 OS Threads 有一个 N:1 映射。所有的绿色线程都在一个操作系统线程上运行。使用虚拟线程,多个虚拟线程可以在多个本机线程上运行(n:m 映射)

    来自JEP 425

    • Java 的绿色线程都共享一个操作系统线程(M:1 调度),最终被作为操作系统线程包装器实现的平台线程(Java 的本机线程)(1:1 调度)超越

    • 虚拟线程采用 M:N 调度,其中大量 (M) 虚拟线程被调度为在较小数量 (N) 的操作系统线程上运行。

    以下是 JEP 的完整报价:

    虚拟线程是线程的轻量级实现,它是 由 JDK 而不是 OS 提供。它们是用户模式的一种形式 threads,在其他多线程语言中已经取得成功 (例如,Go 中的协程和 Erlang 中的进程)。用户态线程 甚至在 Java 的早期版本中被称为所谓的“绿色线程”, 当 OS 线程尚未成熟和普及时。然而,Java 的 绿色线程都共享一个 OS 线程(M:1 调度)并且是 最终被平台线程超越,实现为包装器 对于 OS 线程(1:1 调度)。虚拟线程使用 M:N 调度,调度大量(M)个虚拟线程 在较少数量 (N) 的操作系统线程上运行。

    【讨论】:

      猜你喜欢
      • 2018-05-21
      • 2010-12-29
      • 2011-08-08
      • 2011-03-20
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多