目标:最大限度利用cpu核数,不让cpu闲着
CPU 密集型任务:CPU核心数+1
理解:cpu很忙,那就根据机器核数分配一核一个线程,不额外增加工作量。
比如一个8核的CPU,就需要分配8个线程,
但是跟人干活一样,一个核执行完一个线程,还有一些额外的准备工作,并不能很快切入到下一个线程,所以需要比系统核数多增加一个等待的线程,提前完成准备工作,设置9个。
IO 密集型任务:CPU核心数 * (1+IO耗时/CPU耗时)
理解:io密集会占有线程等待任务执行完毕,此时cpu核可以闲下来执行一些别的线程,来提高利用率,所以需要设置的线程数比cpu核数多。
以一个核为例,io执行时间为3ms,cpu耗时为1ms,这时候cpu执行完3个线程为3ms,第一个io的线程正好执行完,可以接着进入下一次任务,所以使用IO耗时/CPU耗时=3,
去掉一些额外准备工作需要加1线程,
最后考虑多核的情况,cpu核数是多少就需要乘以几核。