对比
- 数据共享与同步方面
- 多进程数据共享复杂,需要用IPC(进程间通讯)
数据是分开的,同步简单 - 多线程因为共享进程数据,数据共享简单,但是也因为这个问题导致同步复杂
- 多进程数据共享复杂,需要用IPC(进程间通讯)
- 内存、CPU
- 多进程占用内存多,切换复杂,CPU利用率低
- 多线程占用内存少,切换简单,CPU利用率高
- 创建销毁切换
- 多进程创建销毁切换复杂,速度慢
- 多线程创建销毁切换简单,速度快
- 编程调试
- 多进程编程简单,调试简单
- 多线程编程复杂,调试复杂
- 可靠性
- 多进程进程间不会相互影响
- 多线程一个线程挂掉将导致整个进程挂掉
- 分布式
- 多进程适用于多核、多机分布式,如果一台机器不够,扩展到多台机器比较简单
- 多线程适用于多核分布式
具体实践
- 需要频繁创建销毁优先用线程
- 需要进行大量计算的用线程
大量计算需要消耗很多CPU资源,切换频繁,这种情况下线程最合适 - 强相关处理用线程,弱相关处理用进程
一般的Server需要完成如下任务:消息收发、消息处理。“消息收发”和“消息处理”就是弱相关的任务,而“消息处理”里面可能又分为“消息解码”、“业务处理”,这两个任务相对来说相关性就要强多了。因此“消息收发”和“消息处理”可以分进程设计,“消息解码”、“业务处理”可以分线程设计。
- 可能要扩展到多机分布的用进程,多核分布用线程