- 根本区别:进程是资源分配的最小单位,线程是程序执行的最小单位
- 资源开销:每个进程都有自己的独立地址空间,进程间切换需要较大开销。同一进程内的多个线程共享进程的堆和方法区,线程之间切换消耗少。
- 一个进程崩溃后在保护模式下不会影响其他进程,一个线程崩溃后整个进程结束。
- 每个独立的进程都有程序入口,执行过程,程序出口。线程依存于应用程序中,不能独立执行。
多进程
优点
- 通常不需要考虑锁和同步资源的问题
- 更强的容错性,一个进程崩溃后不会影响其他进程
- 有内核保证的隔离:数据隔离和错误隔离
场景
- chrome浏览器也是多进程方式。 (原因:①可能存在一些网页不符合编程规范,容易崩溃,采用多进程一个网页崩溃不会影响其他网页;而采用多线程会。②网页之间互相隔离,保证安全,不必担心某个网页中的恶意代码会取得存放在其他网页中的敏感信息。)
- redis也可以归类到“多进程单线程”模型(平时工作是单个进程,涉及到耗时操作如持久化或aof重写时会用到多个进程)
多线程
优点
- 创建速度快,方便高效的数据共享,多线程可共享同一块虚拟地址空间
- 上下文切换开销小,不需要切换地址空间,不用更改寄存器,不用刷新TLB
- 提供非均质服务,有效降低简单任务被复杂任务压住的概率
场景
- 有数据需要共享或频繁通信时
- 事件响应有优先级
- 有IO交互的应用,良好的用户体验(键盘鼠标的输入,立刻响应)
怎么选多进程还是多线程
- 需要经常创建和销毁的时候选多线程:web服务器
- 大量计算时选多线程:CPU切换频繁
- 强相关用线程,弱相关用进程
强相关:消息解码,业务处理
弱相关:消息收发,消息处理 - 多核分布用多线程,多机分部用多进程
网友评论