根据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/