Project Loom的用户模式线程或协程的性能是否一定很好? - Dukesletter


Project Loom继续前进,并引起了讨论:用户模式线程如何提供比OS线程更好的应用程序性能?
OpenJDK的Project Loom的技术主管Ron Pressler在“ 关于用户模式线程和协程的性能 ”中回答了这个问题。
本文不是技术性文章,也不涉及实施细节。Ron 使用排队论和利特尔定律解释说,尽管虚拟线程中的任务切换成本比OS线程中的成本低,但真正的收益在于能够增加执行实际工作的进程数量,同时降低其成本(我们可以有更多线程而消耗很少的资源)。
这个想法很重要,它将帮助我们更好地理解: Project Loom是否会废除Java Futures?
Java 15将发布Project Loom的第一个版本,Project Loom在Reactive模型范式中的影响:“ 对Project Loom,Reactive模型和协程 ”:

  • Reactive模型和Kotlin协程都在客户端代码和JVM线程之间添加了一个额外的抽象层。框架/库的职责是动态地将一个映射到另一个。问题的关键在于,JVM线程是OS线程的薄包装:请记住,OS线程创建起来很昂贵,并且数量限制在数千个之内。
  • Project Loom的目标是实际上将JVM线程与OS线程解耦。其中一个想法是创建一个额外的抽象,称为Fiber
  • 但是,java15并没有引入新的Fiber类,而是重用了Java开发人员非常熟悉的一个类- java.lang.Thread!因此,在新的JVM版本中,某些Thread对象可能是重量级的并映射到OS线程,而另一些对象可能是虚拟线程。
  • Project Looms将现有的Thread实现方式从OS线程的映射更改为可以表示此类线程或虚拟线程的抽象。就其本身而言,这是一个有趣的举动,它在一个平台上历来比创新更重视向后兼容性。与其他最新的Java版本相比,此功能是真正的游戏规则改变者。一般而言,开发人员应尽快开始熟悉它。打算学习Reactive和协程的开发人员可能应该退后延迟一步。