java - 从 JDK19 虚拟线程中受益的最低并发数

标签 java java-threads project-loom

根据JEP 425 ,

virtual threads can significantly improve application throughput when the number of concurrent tasks is high (more than a few thousand), and the workload is not CPU-bound

当线程数远低于几千时,为什么虚拟线程没有帮助?如果我有 50 个并发 I/O 密集型任务,通过使用虚拟线程来消除重量级操作系统线程上下文切换,我不会显着减少 CPU 负载吗?

最佳答案

简而言之:如果有 50 个并发任务,则使用虚拟线程不会获得太多好处。它们也不会让事情变得更糟——你几乎不会注意到任何差异。但是当 native 线程数量很高时,情况开始发生变化。

有多高?典型的应用程序只能维持同时运行的数千个线程(经验观察)。除此之外,您很可能会耗尽 RAM(线程堆栈将占用数十 GB 的内存),而且不断的上下文切换会减慢您的应用程序的速度。

虚拟线程在用户空间中切换,并且它们的堆栈很小(数百字节)。因此,您的应用程序可能会在数百万次测试中幸存下来。

因此,除非您需要同时处理大量客户端(我所说的“大”是指成百上千个),否则您不会从使用虚拟线程中受益匪浅。这些适用于巨大的 I/O 密集型工作负载。但我当然建议尝试和衡量。

关于java - 从 JDK19 虚拟线程中受益的最低并发数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73830966/

相关文章:

java - 如何将不同的线程分配给不使用 main 主线程的其他类的不同方法

java - 先后在Android中运行Handler Task

java - 项目机子: Why are virtual threads not the default?

java - 尝试将 Project Loom/Virtual Threads 与 OpenJDK 19-loom JAVA 结合使用时出现问题

java - 模型和 DTO 之间映射对象时出现的问题

java - 使用扫描仪阅读/查找特定部分

java - 从 Java 客户端连接到 Mapr-DB (M3)

java - java代码的解释?

java - 我可以调用同步方法来调用非同步方法,而非同步方法又调用同步方法吗?