您的位置:首页>>资讯中心>>行业资讯

Java 引入预览版虚拟线程(协程)功能,大幅提高应用吞吐量

根据虚拟线程(预览版)功能提案,Java平台将引入虚拟线程(预期协程)。虚拟线程是一个轻量级线程,可以显著减少编写、维护和观察高吞吐量并发应用的工作量。

Java开发人员一直依靠线程作为并发服务器应用程序的构建块。每种方法中的句子都在一个线程中执行。每个线程提供一个堆栈来存储局部变量和协调方法,并在报告错误时捕获上下文。线程是Java的并发单元,也是Java工具的核心基础:调试器逐步执行线程方法中的句子,分析器可视化多个线程。JAVA培训

目前,JDK将其平台线程实现为操作系统(OS)线程的包装器。JDK中的每个例子都是一个平台线程。平台线程在底层操作系统线程上运行Java代码,并在代码的整个生命周期中捕获OS线程。平台线程的数量仅限于OS线程的数量,而且OS线程的成本非常高,不能占用太多。因此,JDK线程限制了其应用程序的吞吐量,使其吞吐量远低于硬件支持水平。

关于虚拟线程。

Java.lang.thread是Java代码在底层操作系统线程(OS线程)上运行的一个例子,但OS线程在代码的整个生命周期中没有被捕获。这意味着许多虚拟线程可以在同一个OS线程上运行Java代码,从而有效地共享它。JAVA培训

虚拟线程由JDK而不是操作系统提供的轻量级线程实现,也是用户模式线程的一种形式。用户模式线程在Java的早期版本中被称为绿色线程。

现代硬件可以轻松支持10000个虚拟线程同时运行此类代码。如果该程序使用Executorservice为每个任务创建一个新的平台线程,如Executors.newcachedhreadpol(),那么它将尝试创建1000个平台线程,这意味着1000个OS线程,那么该程序将在大多数操作系统中崩溃。或者该程序使用Executorservice,从池中获取平台线程,如Executors.newfixedhreadpol(200)。Executorservice将创建200个平台线程,共享1000个任务,任务将按顺序运行,而不是同时运行,需要很长时间才能完成。

对于上述程序,拥有200个平台线程的池每秒只能实现200个任务的吞吐量,而虚拟线程每秒可实现10000个任务的吞吐量(充分预热后)。此外,如果示例程序中的10000改为1000,程序将提交10000个任务,创建1000个并发运行的虚拟线程,并达到约1000个任务/秒的吞吐量。

简而言之,虚拟线程是更快的线程——它们的运行代码不比平台线程快。它们的存在是为了提供更大的规模(更高的吞吐量),而不是更低的延迟)。

如何使用虚拟线程?

目前,虚拟线程广泛应用于其他多线程语言(如GO中的协程和Erlang中的过程,也是C++中的稳定性),但它仍然是Java中的预览API,默认禁止。如果您想在JDKXX上尝试此功能,您必须使用预览API:

使用javac-releasex-enable-previewmain.java编译程序,使用java-enable-previewmain。

使用源代码启动器时,使用java-releasex-enable-previewmain.java操作程序。

使用jshell时,用jshel-enable-preview启动。

在OpenJDK的JDKIsue-827131中可以查看更多关于虚拟线程的信息。目前该提案成立于2021/11/15,仍处于JEP流程的第一阶段,距离稳定版还有一段时间。

上一篇: 三分钟带你了解云计算

下一篇: 学历低参加Java软件开发培训机构学习有用吗