据我了解,切换到react 式(例如Project Reactor、RxJava、Vert-X)或参与者(Akka)框架的原因之一是线程切换的成本很高. 查看Difference between platform thread, carrier thread and virtual thread in context of Java 21 and later和有关虚拟线程的其他信息,我想知道.
虚拟线程是否消除了切换到不同范式的理由,因为它只会将阻塞虚拟线程替换到载体上的不同线程?
据我了解,切换到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的特别演讲.