进程数
当单进程cpu 消耗接近80%时, 代表达到单进程处理的上限;业务上尽量保证单进程cpu <75%, 以应对突发情况;
多进程的优点和弊端
优点:- 提高业务系统的处理能力
- 充分利用多核CPU
弊端:
- 进程越多,占用资源越多,内存(忽略), redis,mysql 连接数会乘数级别增高
- 进程间通信效率不如进程内通信的效率;
如何评估进程数量?
a. 评估单进程的处理能力- 评估时,保证单进程CPU 占用率70%,此时的业务处理能力就是我们的一个标尺,比如单进程能处理30个路口;
业务上,如果使用多线程,通过合适的调整多线程数量,解决IO操作问题,提升单进程CPU 使用率;
- 线程数不宜过多,否则都是线程切换开销,如果线程超过50个(个人主观),应该重点关注是否影响性能;
- 线程调整过程中, 每次应该适量调整,进行观察;
- 业务上,如果使用协程,因为协程数量增加,基本不会影响性能(协程的优势就在于此),协程数量可随意配置,通过观察CPU 使用率,得到一个主观的评估;
b. 进程数量的计算
通过单进程的业务处理能力,根据业务大小,可计算出进程数量
线程数(协程同理)
因为单进程只能利用一个CPU, 因此线程数的调整,旨在解决IO 密集(网络IO)问题;
如何优化线程数量;
a. 基本条件:* 每秒需要处理的处理的业务数为 a 条, 假设业务数是均匀产生 * 业务函数处理时长(包含IO) 为 X s * 业务允许的处理延时为 Y s (Y > X)
b. 横向并发优化:
* 将业务函数运行在等价的多线程里; * 考虑业务不积压,不考虑延时,多线程数n = a * (1/X) = a * X * 考虑业务不积压,延时符合要求,情况复杂,暂时没有碰到此种情况,且主要是争对业务非均匀产生的情况,比如一一分钟一次产生N 条业务数;
c. 纵向并发优化:
* 因特殊原因,业务函数无法横向并发优化(保证时序性), 可进行纵向优化; * 将业务函数拆分多个前后依赖的小函数,将小函数运行在多线程里; * 最终业务函数的处理时长(包含IO)由 X 缩减为 max(X1, X2,...)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。