程序开多少线程合适?
这里需要区别下应用是什么样的程序:
CPU 密集型程序, 一个完整请求, I/O 操作可以在很短时间内完成, CPU 还有很多运
算要处理,也就是说 CPU 计算的比例占很大一部分,线程等待时间接近 0
单核 CPU : 一个完整请求, I/O 操作可以在很短时间内完成, CPU 还有很多运算要
处理,也就是说 CPU 计算的比例占很大一部分,线程等待时间接近 0 。单核 CPU 处
理 CPU 密集型程序,这种情况并不太适合使用多线程,
多核 : 如果是多核 CPU 处理 CPU 密集型程序,我们完全可以最大化的利用 CPU
核心数,应用并发编程来提高效率。 CPU 密集型程序的最佳线程数就是:因此对于
CPU 密集型来说,理论上 线程数量 = CPU 核数(逻辑),但是实际上,数量一般
会设置为 CPU 核数(逻辑) + 1 (经验值)
计算 (CPU) 密集型的线程恰好在某时因为发生一个页错误或者因其他原因而暂停,
刚好有一个 “ 额外 ” 的线程,可以确保在这种情况下 CPU 周期不会中断工作
I/O 密集型程序,与 CPU 密集型程序相对,一个完整请求, CPU 运算操作完成之后还有
很多 I/O 操作要做,也就是说 I/O 操作占比很大部分,等待时间较长,线程等待时间所 占比例越高,需要越多线程;线程 CPU 时间所占比例越高,需要越少线程 I/O 密集型程序的最佳线程数就是: 最佳线程数 = CPU 核心数 (1/CPU 利用率 ) =
CPU 核心数 (1 + (I/O 耗时 /CPU 耗时 ))
如果几乎全是 I/O 耗时,那么 CPU 耗时就无限趋近于 0 ,所以纯理论你就可以说是
2N ( N=CPU 核数),当然也有说 2N + 1 的, 1 应该是 backup
一般我们说 2N + 1 就即可
基于 EA的 IT与业务融合
如何预防死锁?-CSDN博客
事务底层与高可用原理
超高并发直播弹幕方案-CSDN博客