哪些线程完全是CPU绑定的

时间:2015-11-12 17:32:36

标签: c++ multithreading

我听说线程的最佳数量取决于它们是否受CPU限制。但究竟是什么意思呢?

假设我的线程将通过WinAPI中的Sleep函数休眠的时间最多。我是否应该将此类线程视为非CPU绑定并增加其CPU核心数量?

1 个答案:

答案 0 :(得分:4)

如果一个线程花费大部分时间使用它,那么它就会被资源绑定,因此它的速度受该资源的速度限制。

鉴于上述定义,如果一个线程的最常用资源是CPU的计算能力,那么它就是CPU绑定的,也就是说,它是一个执行繁重计算的线程。除了可用内核之外,你没有从中获得更多这些内容,因为它们将争夺CPU时间。

当线程被其他资源(最常见的文件)绑定时,你可以(相反)放置比可用内核更多的线程,因为它们将花费大部分时间等待那些准备就绪,从而使CPU可用于其他线程

花费大部分时间睡眠的线程不会非常使用CPU,因此它不受CPU限制。

编辑:非CPU绑定线程的示例是读取文件,等待网络连接,与PCI连接设备通信,花费大部分时间等待条件变量和等待用户输入的GUI线程的线程。