进程、线程对比
目标
知道进程和线程关系及优缺点
1. 功能对比
进程,能够完成多任务,比如 在一台电脑上能够同时运行多个QQ
线程,能够完成多任务,比如 一个QQ中的多个聊天窗口
2. 定义对比
进程是系统进行资源分配基本单位,每启动一个进程操作系统都需要为其分配运行资源。
线程是运行程序中的一个执行分支,是CPU调度基本单位。
总结:进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位
3. 关系对比
线程是依附在进程里面的,没有进程就没有线程
一个进程默认提供一条线程,进程可以创建多个线程
4. 区别
进程之间不共享全局变量
线程之间共享全局变量,但是要注意资源竞争的问题,解决办法: 互斥锁或者线程同步
创建进程的资源开销要比创建线程的资源开销要大
进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位
线程不能够独立执行,必须依存在进程中
多进程开发比单进程多线程开发稳定性要强
优缺点
多进程:
优点:可以用多核
缺点:资源开销大
多线程:
优点:资源开销小
缺点:不能使用多核
5. 进程的状态
工作中,任务数往往大于cpu的核数,即一定有一些任务正在执行,而另外一些任务在等待cpu进行执行,因此导致了有了不同的状态
就绪态:运行的条件都已经慢去,正在等在cpu执行
执行态:cpu正在执行其功能
等待态:等待某些条件满足,例如一个程序sleep了,此时就处于等待态
注意:创建子进程其实是对主进程进行拷贝,进程之间相互独立,访问的全局变量不是同一个,所以进程之间不共享全局变量
主进程会等待所有的子进程执行完成程序再退出
线程之间执行是无序的
主线程会等待所有的子线程结束后才结束
现实生活中的公司可以理解成是一个进程,公司提供办公资源(电脑、办公桌椅等),真正干活的是员工,员工可以理解成线程。
注意:一个程序至少有一个进程,一个进程至少有一个线程,多进程可以完成多任务.
可以使用multiprocessing模块的Queue实现多进程之间的数据传递,Queue本身是一个消息列队程序
从队列取值使用get方法,向队列放入值使用put方法