1. 功能对比
- 进程,能够完成多任务,比如 在一台电脑上能够同时运行多个QQ
- 线程,能够完成多任务,比如 一个QQ中的多个聊天窗口
2. 定义对比
- 进程是系统进行资源分配基本单位,每启动一个进程操作系统都需要为其分配运行资源。
- 线程是运行程序中的一个执行分支,是CPU调度基本单位。
- 总结:进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位
3. 关系对比
- 线程是依附在进程里面的,没有进程就没有线程
- 一个进程默认提供一条线程,进程可以创建多个线程
4. 区别
- 进程之间不共享全局变量
- 线程之间共享全局变量,但是要注意资源竞争的问题,解决办法: 互斥锁或者线程同步
- 创建进程的资源开销要比创建线程的资源开销要大
- 进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位
- 线程不能够独立执行,必须依存在进程中
- 多进程开发比单进程多线程开发稳定性要强
5、优缺点
多进程:
- 优点:可以用多核
- 缺点:资源开销大
多线程:
- 优点:资源开销小
- 缺点:不能使用多核
6、总结
- 进程之间不共享全局变量
- 主进程会等待所有的子进程执行完成程序再退出
- 从队列取值使用get方法,向队列放入值使用put方法
- 消息队列判断队列是否为空不可靠,可以使用延时和根据个数进行判断
multiprocessing.Pool常用函数解析:
- apply(func[, args[, kwds]]): 阻塞方式调用函数,args表示以元组方式给函数传参,kwds表示以字典方式给函数传参
- apply_async(func[, args[, kwds]]) :使用非阻塞方式调用函数,args表示以元组方式给函数传参,kwds表示以字典方式给函数传参
- close():关闭Pool,使其不再接受新的任务;
- terminate():不管任务是否完成,立即终止;
- join():主进程阻塞,等待子进程的退出, 必须在close或terminate之后使用
参考链接:
https://blog.csdn.net/hlg1995/article/details/81638732