守护进程,进程安全,IPC进程间通讯,生产者和消费者模型
守护进程
它本身也是一个进程,可以守护着另一个进程
一个进程a设置为b的守护进程,当b结束时,a会立马结束自己,不管任务是否执行完毕
使用场景
例如:QQ进程有一个下载任务交给了一个子进程,但是过程中QQ退出了,下载进程也可以随之关闭了
守护进程必须放在开启之前
进程安全问题
当多个进程要同时操作同一个资源时,就可能出现问题
例如:
只有一台打印机,但有很多打印任务,如果不加以控制,可能造成打印结果错乱
解决方案:加join,将原本并发的任务变成了串行执行
但是,如此一来进程与进程之间就不再平等,顺序就已经固定死了
最终的解决方案就是加锁
如果使用Lock来实例化产生一把锁
但是要保证每个进程访问的都是同一把锁
在访问共享资源前加锁
访问完毕后一定要解锁
注意:不能多次执行acquire 一次acquire就对应一次release
acquire是一个阻塞函数,会一直等到锁被释放(release调用)才会执行
加锁之后并发又变成串行了,不过与join不同的是没有规定顺序,谁先抢到就是谁先执行
问题:一旦加锁效率降低,不加锁数据就要错乱
在使用锁的时候,无可避免的会降低效率
需要找到一个最合适的地方加上锁
你锁住的代码越少效率越高
join和锁的区别
join是固定死了执行顺序,程序也变成了串行
join是让整个进程中的代码全部串行,而锁可以只让部分代码串行
粒度(被锁住的代码量)越小,效率越高
互斥锁
互相排斥对方
a在执行,b就无法执行
IPC是进程间通讯
进程与进程之间内存是物理隔离的,无法直接通讯
例如:QQ要调用浏览器来显示某个网页,网页的地址就必须想办法告诉浏览器
1.使用一个共享文件,在硬盘创建一个文件,不同进程之间共享这个文件
优点:交换的数据量几乎没有限制
缺点:速度慢
2.系统开辟一块共享内存来供进程间交换数据
优点:速度快
缺点:交换的数据量不能太大
3.管道
优点:封装了文件的打开关闭等操作
缺点:速度慢并且是单向的,编程的复杂度较高
4.socket
不仅可以用于与远程计算机中的进程通讯,还可以用于与本地进程通讯
基于内存的,速度快
队列也是一个容器
特点:先进先出
自动处理进程间的安全问题(加锁)
例如:迅雷下载,先添加的任务一定先开始执行
put:会阻塞直到有空位置为止
set:会阻塞到有数据为止
block:阻塞
timeout:等待超时,只有block为True时才有效
堆栈:
特点:先进后出
例如:函数的执行,还有吃薯片,都是从最先吃上面
生产者消费者模型
模型即解决某个问题的套路
问题:
生产者辅助产生数据
消费者处理数据
当消费者与生产者的能力不匹配时,必须一放等待另一方,这样效率就变低了
生产者和消费者模型的优点:
1.平衡生产者和消费者之间的能力差异,提供处理效率
2.降低了双方耦合度
学习并发的两个核心问题是安全性和效率


浙公网安备 33010602011771号