假如电脑CPU是8核16线程
- CPU密集型计算,理想情况下设置为16或16+1 。
- IO密集型计算,理想情况下设置为 16/(1- IO阻塞时间/( IO阻塞时间+CPU占用时间))
横坐标是线程执行时间,纵坐标是线程编号。
一个线程即使是执行IO密集型任务也必然占用CPU时间。
红色箭头是该线程占用CPU时间。绿色箭头是IO挂起时间(不占用CPU)。
起始点到黄线是线程1完成一次任务的时间
可以看出。一个CPU可处理线程的数量= 线程完成一次任务的时间/线程CPU占用时间 时对CPU的利用率达到最大化。
如果线程数量多,线程则会竞争CPU,造成大量上下文切换。
如果线程少,则会对CPU利用不充分,产生闲置时间。
线程完成一次任务的时间 = 线程占用CPU时间 + IO阻塞等待时间
所以能推导出
一个CPU可处理线程的数量= 线程完成一次任务的时间/线程CPU占用时间 = (线程占用CPU时间 + IO阻塞等待时间)/线程CPU占用时间
多个CPU时再乘以CPU的数量8(或者超线程数量16)
也就得到了网上的公式
线程数 = CPU数 * (1 + IO阻塞等待时间/线程CPU占用时间 )= CPU数/ (1 - IO阻塞等待时间/( IO阻塞等待时间+线程CPU占用时间))



