在实践中,可能很难找到最佳线程数,并且即使每次运行程序,该线程数也可能会有所不同。因此,从理论上讲,最佳线程数将是您计算机上具有的 内核
数。如果您的内核是“超线程”(如英特尔所说),则每个内核可以运行2个线程。然后,在这种情况下,最佳线程数是计算机上内核数的两倍。
Also, what causes the logic that the more threads allocated, i.e. more being able to be done at once, to be incorrect?
分配更多线程导致并发完成更多工作的原因是错误的,因为每个内核一次只能运行1个(如果内核为“超线程”,则为2个线程)。
因此,假设我有一台没有超线程的四核计算机。在这种情况下,我最多可以同时运行4个线程。因此,我的最大吞吐量应该通过4个线程来实现。假设我尝试在同一设置上运行8个线程。在这种情况下,内核将来回调度这些线程(通过上下文切换),并
阻塞 一个线程以使另一个线程运行。因此,最多可以同时运行4个线程的工作。
有关此的更多信息,使用Linux内核查找“上下文切换”将非常有帮助。这将为您提供有关此主题的所有信息。
另外,请注意,在称为“用户级线程”和“内核级线程”的线程之间存在差异。如果您进一步研究此主题,则这是一个重要的区别,但这不在此问题的范围内。



