参考文献:https://blog.csdn.net/linraise/article/details/12979473
进程和线程的区别
概念区别:进程是系统资源分配的最小单元。线程是CPU调度和执行的最小单元,在每个时间片中只有一个线程执行。线程又被称为轻量级进程。
包含关系:一个进程可以由很多个线程组成,且至少有一个主线程,其他是子线程,线程依附于进程。
内存分配、开销:进程有自己独立的地址空间,线程使用和进程相同的地址空间,共享进程所有的资源,每个线程也有自己的堆栈和局部变量,因此CPU切换线程的代价比切换进程小很多,同时创建线程的开销也小很多。
通信:线程间通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程间需要进程间通信IPC。
健壮性:多进程更健壮,进程间相互独立,所有进程间的crash不会相互影响。
多进程和多线程区别
多进程 | 多线程 | |
---|---|---|
数据共享、同步 | 数据相互独立;共享复杂,需要IPC;同步简单 | 多线程共享进程数据;共享简单;同步复杂; |
内存、CPU | 占用内存多,切换复杂、CPU利用率低; | 占用内存少,切换简单、CPU利用率高; |
创建、销毁、切换 | 复杂,速度慢 | 简单,速度快 |
可靠性 | 进程间不会相互影响 | 一个线程crash会导致整个进程挂掉 |
分布式 | 应用于多核、多机分布;扩展到多台机器比较简单; | 应用于多核分布; |
编程、调试 | 简单 | 复杂 |
多进程 | 多线程 | |
---|---|---|
优点 | 内存隔离,单个进程的异常不会导致整个应用的崩溃 | 提高系统的并行性,并且开销小 |
缺点 | 进程间调用,通信和切换的开销大 | 没有内存隔离,单个线程的崩坏会导致整个进程的崩溃,发生bug时,定位不方便 |
使用 | 目标子功能之间交互少 | 存在大量IO,网络等耗时操作,或者需要和用户交互时,使用多线程有利于提高系统的并行性 |
如何选用多进程、多线程?
- 需要频繁创建和销毁,优先使用线程。
- 需要大量计算,优先使用线程。
- 强相关的处理使用线程,弱相关的处理使用进程。
- 可能扩展到多机分布使用进程,多核分布使用线程。