首先我们要理解多线程执行类型分为CPU密集型和IO密集型,还有混合型(包括cpu密集加上IO密集型)
1:cpu密集型,与程序计算相关的操作。例如 某模型计算用得到了大量算法,此类型会消耗CPU。一版线程数量只需 要设置CPU数加1, 更多的线程数也只能增加上下文切换,不能增加CPU利用率。
2:IO密集型,网络,磁盘IO操作,如访问数据库,RPC调用,缓存之类的。这部分都会存在等待时间,不占用CPU,我们可以设置大点,一般线程数需要设置2倍CPU数以上,以此来尽量利用CPU资源。
精确计算:
最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目。
比如平均每个线程CPU运行时间为0.5s,而线程等待时间(非CPU运行时间,比如IO)为1.5s,CPU核心数为8,那么根据上面这个公式估算得到:((0.5+1.5)/0.5)*8=32
对于一个CPU,线程数总是大于或等于核心数的。一个核心最少对应一个线程,但通过超线程技术,一个核心可以对应两个线程,也就是说它可以同时运行两个线程。
在Windows中,在cmd命令中输入“wmic”,然后在出现的新窗口中输入“cpu get *”即可查看物理CPU数、CPU核心数、线程数。其中,
Name:表示物理CPU数
NumberOfCores:表示CPU核心数
NumberOfLogicalProcessors:表示CPU线程数