据9月425称,
当并发任务的数量很高(超过几千项)且工作负载不受CPU限制时,虚拟线程可以显著提高应用程序的吞吐量。
当线程数远低于几千个时,为什么虚拟线程没有帮助?如果我有50个并发I/O绑定任务,那么使用虚拟线程来消除重量级OS线程上下文切换,不会显着地减少CPU负载吗?
发布于 2022-10-06 10:17:45
简而言之:在50个并发任务的情况下,使用虚拟线程不会获得多少好处。它们也不会使事情变得更糟--你几乎不会注意到有什么不同。但是,当本机线程的数量很高时,情况就开始发生变化。
有多高?一个典型的应用程序只能支持数千个同时运行的线程(一个经验观察)。除此之外,您很可能会耗尽RAM (线程堆栈将占用数十of内存),加上持续的上下文切换将减缓应用程序的速度。
虚拟线程在用户空间中切换,它们的堆栈很小(数百字节)。因此,您的应用程序可能会存活数百万次。
因此,除非您同时需要大量的客户机(我的意思是数百个),否则使用虚拟线程不会有多大好处。它们用于异常的I/O绑定工作负载。当然,我建议试着测量一下。
发布于 2022-10-26 09:38:12
在一个最流行的服务器(tomcat)中,默认线程数是200个。在核心计数之上的任意数量的线程都将导致上下文切换,这包括进程不拥有的线程。
即使是空闲(休眠)线程也有开销。调度程序必须不时地对它们进行ping,以查看是否需要唤醒其中的任何一个。这意味着,始终是一个好主意,保持线程计数低,并尽可能接近内核的数量。
如其他答案所述,使用VT没有坏处,您应该进行实验,看看它们在应用程序中的行为,但不要期望对这个微小的负载有任何改变。
https://stackoverflow.com/questions/73830966
复制相似问题