我听说线程的最佳数量取决于它们是否受CPU限制。但究竟是什么意思呢?
假设我的线程将通过WinAPI中的Sleep
函数休眠的时间最多。我是否应该将此类线程视为非CPU绑定并增加其CPU核心数量?
答案 0 :(得分:4)
如果一个线程花费大部分时间使用它,那么它就会被资源绑定,因此它的速度受该资源的速度限制。
鉴于上述定义,如果一个线程的最常用资源是CPU的计算能力,那么它就是CPU绑定的,也就是说,它是一个执行繁重计算的线程。除了可用内核之外,你没有从中获得更多这些内容,因为它们将争夺CPU时间。
当线程被其他资源(最常见的文件)绑定时,你可以(相反)放置比可用内核更多的线程,因为它们将花费大部分时间等待那些准备就绪,从而使CPU可用于其他线程
花费大部分时间睡眠的线程不会非常使用CPU,因此它不受CPU限制。
编辑:非CPU绑定线程的示例是读取文件,等待网络连接,与PCI连接设备通信,花费大部分时间等待条件变量和等待用户输入的GUI线程的线程。