曾经我认为应该使用多个线程的唯一场合是需要 IO 处理时。
但我听说它在没有 IO 处理的情况下也很有用。因为它有助于占用更多的CPU资源。
据我了解,这将是
the process with more threads are given more CPU time.
这就是为什么即使在单核上多线程也有助于提高性能的原因吗?
曾经我认为应该使用多个线程的唯一场合是需要 IO 处理时。
但我听说它在没有 IO 处理的情况下也很有用。因为它有助于占用更多的CPU资源。
据我了解,这将是
the process with more threads are given more CPU time.
这就是为什么即使在单核上多线程也有助于提高性能的原因吗?
您可以看到单个 CPU 上的多个线程具有更高性能的一个可能原因是 CPU 往往非常擅长指令重新排序和利用指令级并行性。与单个线程中的任何两条顺序指令相比,线程之间的数据和控制依赖关系更少,因此它们为 CPU 和操作系统级别的调度程序和重新排序机制提供了更多的可能性,非常聪明。
不要忘记,当以特定方式查看时,诸如“在内存中读取和写入”之类的东西仍然是“I/O”。这些是相对较慢的操作,并且现代 CPU 中的大部分流水线用于隐藏内存延迟 - 一次执行多个线程对于填充时间很有用,否则这些时间必须用延迟槽填充,其中存在数据危险一个线程。
也就是说,线程通常不是提高性能的好解决方案,并且可能会产生恰恰相反的效果。在某些问题上使用单个线程很容易使所有可用的内存带宽饱和。