1、为什么要使用多线程?
性能的核心指标:
延迟,指的是发送请求到收到响应的过程的耗时。延迟越短,程序执行时间越短,性能越好。
吞吐量,指的是单位时间能够处理的请求数。吞吐量越大,意味着程序能处理的请求越多,性能也就越好。
所以,要提升性能,就是要 降低程序的延迟。提高程序的吞吐量。
两个方向:1.优化算法 2.将硬件的性能发挥到极致,具体来讲,就是要提升硬件的利用率,再具体的讲,就是要提升 I/O利用率和CPU利用率。
2、不同的场景工程上有不同的线程数经验值
CPU密集型:最佳线程数=CPU核数+1
I/O密集型:最佳线程数=CPU核数 *(1+(I/O耗时 / CPU耗时))
不过,定性的io密集或者cpu密集很难在定量的维度上反应出性能瓶颈,而且公式上忽略了线程数增加带来的cpu消耗,性能优化还是要定量比较好,这样不会盲目,比如io已经成为了瓶颈,增加线程或许带来不了性能提升,这个时候是不是可以考虑用cpu换取带宽,压缩数据,或者逻辑上少发送一些。经验值在大部分应用环境是合理的,是积累了一些调优经验后给出的方案,没有特殊需求,初始值我会选大家都在用的标准。