vlambda博客
学习文章列表

好消息Java将支持虚拟线程有利于并发编程


一直从事基于AKKA的反应式开发,深知并发异步操作的重要性。随着当前分布式应用事务需求场景的处处可见,如果开发语言不能够简化这方面的开发,势必会成为短板。福音来了,Java计划利用虚拟线程技术来解决这个问题,到底怎么回事,请了解如下内容。


在为 Java 提出虚拟线程,以显着减少编写、维护和观察高吞吐量并发应用程序所需的工作量。


Oracle 本周提交的 JDK 增强提案 (JEP) 草案要求将虚拟线程作为 Java 标准版的一部分进行预览。[https://openjdk.java.net/jeps/8277131]虚拟线程将通过轻量级用户模式线程实现来补充代表操作系统线程的 Java 平台线程,从而更有效地利用可用硬件,并显着降低成本。 


提案说明,线程对于表示一个并发单元(例如事务)很有用。Java 当前的 Thread 实现为每个 Java 线程消耗一个 OS 线程,而 OS 线程稀缺且成本高昂。现代服务器可以处理比操作系统线程多几个数量级的并发事务。


编写高吞吐量服务器软件的开发人员不得不在事务之间共享线程以有效利用硬件。这是使用线程池完成的,线程池将线程一个接一个地借给一个事务,以节省为每个事务创建线程的成本。当这还不够时,开发人员甚至在事务中间等待 I/O 时开始将线程返回到池中。这导致了一种异步编程风格,需要一组单独的、不兼容的 API,并使故障排除、调试、观察和分析变得非常困难。


java.lang.Thread虚拟线程是不阻塞操作系统线程的用户模式实现,可实现近乎最佳的硬件利用率。虚拟线程允许高水平的并发性和高吞吐量,同时程序与 Java 平台和工具的基于线程的设计保持一致。虚拟线程之于平台线程就像虚拟内存之于物理 RAM:一种通过自动映射到底层物理资源来提供丰富“虚拟”资源的机制。


该提案称,无需学习新的编程模型即可使用虚拟线程。使用 Java 编写并发应用程序的开发人员已经知道该模型。但是,开发人员需要摒弃由于线程成本高而因需要而产生的旧习惯,特别是使用线程池,这些线程池仅在它们池化的资源稀缺或创建成本高昂时才有用。


虚拟线程是java.lang.ThreadJDK 实现的实例,允许许多活动实例共存于同一进程中。虚拟线程的语义与平台线程相同,只是它们属于单个ThreadGroup,不能枚举。