为什么与 IO 绑定工作相比,计算绑定工作运行的线程数量更少

Why does compute bound work runs on a smaller amount of threads than IO bound work

请看这个video 从 5:15 - 5:46。

我在 youtube 上看这个,那个人在解释 TPL。我对 TPL 很陌生,以前从未听说过它,我做了一些研究,发现它是一个非常复杂的系统,可以简化线程数量并在机器上工作 运行。然而,从时间跨度 5:20 - 5:46,他展示了 2 个完全让我难过的例子。第一个例子是一个计算密集型工作,他写了一个循环 350,000,000 次的 for 循环,这花费了他的计算机大约 1 秒。第二个例子是他写的 IO 绑定作品 Thread.Sleep(1000)。

我的问题是为什么他写的计算密集型工作只使用 2 个线程,而他写的 IO 密集型工作使用 5 或 6 个线程?

CPU-bound 意味着 CPU 正在忙于计算。因此,使用比可用内核更多的线程是没有意义的。更多线程意味着内核需要暂停一个线程以处理另一个线程 - 额外的切换会 减慢 整个系统。

对于 IO 密集型工作,CPU 只是在等待其他系统响应。所以在此期间它可以做其他工作。这就是 async/await 大放异彩的地方。