保持线程池大小等于CPU密集型任务的处理器/核心数的原因是什么?为什么I / O绑定任务应该有更大的池大小?
答案 0 :(得分:2)
在最佳线程数与 c entral p 处理 u 之间存在关联 nits因为线程可以被认为是一个程序。程序需要运行时间。运行时间由中央处理单元提供。
生产者 - 消费者类比将该计划作为消费者,将中央处理单位作为生产者。因此,理论上 - 如果生产者(cpu)可以处理T
个消费者(线程)并且有C
个生产者 - 最佳消费者数量为T * C
。
过多的线程会导致过多的context switch开销,这实际上浪费了cpu时间来管理线程本身。当任务仍在队列中时,太少会导致空闲cpu。
I / O 绑定任务与慢速设备通信(这就是它们被称为I / O绑定的原因)。在向慢速设备(例如硬盘驱动器)发出请求时,scheduler可以让cpu运行其他线程,而不是等待设备的输出。
这个比喻就是你(调度员)在餐馆(线程1)订购食物然后向你的朋友发送短信(线程2)。您等待食物的事实不应该否认您完成其他任务,例如将短信发送给您的朋友。
要了解有关可能的优化的更深入知识,您可能需要了解affinity和scheduling。