据我了解,切换到react 式(例如Project Reactor、RxJava、Vert-X)或参与者(Akka)框架的原因之一是线程切换的成本很高. 查看Difference between platform thread, carrier thread and virtual thread in context of Java 21 and later和有关虚拟线程的其他信息,我想知道.

虚拟线程是否消除了切换到不同范式的理由,因为它只会将阻塞虚拟线程替换到载体上的不同线程?

推荐答案

是的

Java中的平台线程直接映射到线程宿主操作系统线程.这些操作系统线程在内存和中央处理器方面"昂贵".

相比之下,虚拟线程是在Java中管理的,并且非常"便宜",这意味着它们在内存和中央处理器方面都非常高效.现在,有了虚拟线程,您可以合理地期望在常见计算机硬件上同时运行数百万个任务.

是的,大多数(如果不是全部)作为react 式代码完成的工作都可以通过Java虚拟线程完成.编码是vastly simpler to write, comprehend, trace, and debug.react 式方法是为了解决过度使用平台线程的性能问题而发明的.使react 式编程变得不必要是发明虚拟线程的主要动机之一.

警告.虚拟线程禁忌用于受限于处理器的任务,例如视频编码/解码.使用virtual threads only for code that involves blocking,例如日志(log)记录、文件I/O、访问数据库、网络调用.这将涵盖几乎所有Java业务应用程序.

详情请先参阅官方文件JEP 444: Virtual Threads.然后查看Ron Pressler、Alan Bateman或José Paumard的最新演讲视频.

如果您想了解令人印象深刻的性能提升是如何取得的,请参阅Ron Pressler在Continuations上的演讲.需要明确的是:这种理解完全是可选的,对于有效利用虚拟线程来说是不必要的.但如果您需要满足您的极客好奇心,您会喜欢Pressler的特别演讲.

Java相关问答推荐

如何用javac编译Java类,即使对像java.lang.*这样的基本类也没有任何依赖关系?

JPackaged应用程序启动MSI调试,然后启动System. exit()

如何转换Tue Feb 27 2024 16:35:30 GMT +0800 String至ZonedDateTime类型""

替换com. sun. jndi. dns. DnsContextFactory Wildfly23 JDK 17

CAMEL 4中的SAXParseException

如何配置ActiveMQ Artemis以使用AMQP 1.0和其他协议与Java

当返回Mono<;Something>;时,不会调用Mono<;void>;.flatMap

返回响应时,CamelCase命名约定不起作用

Spring @Value default无法计算表达式

把一条整型短裤和两条短裤装成一条长的

如何仅使用键/ID的一部分(组合)高效地返回映射值?

在应用getCellFormula()时,Excel引用中的文件名始终为";[1]";使用Apache POI()

Win32函数的JNA绑定DwmGetColorizationColor返回E_INVALIDARG错误

将BlockingQueue+守护程序线程替换为执行器

Java递归泛型是否可以被视为继承和重写的语法糖

当我将JTextField的getText函数与相等的String进行比较时;t返回true

[jdk21][Foreign Function&;Memory API]MemoryLayout::varHandle通过可变数组进行 struct 化的问题

如果c不为null,Arrays.sort(T[]a,Comparator<;?super T>;c)是否会引发ClassCastException?

为什么 log4j 过滤器在appender中不起作用

Hibernate 命名策略导致 Java Spring Boot 应用程序中出现未知列错误