今日所学内容
一、deamon: 守护进程
二、互斥锁 ——重点
三、IPC 进程间通讯
一、deamon:守护进程
1、什么是守护进程:
进程是一个正在运行的程序,守护进程也是一个普通进程,意思是 一个进程可以守护另一个进程
Eg:在程序运行过程中,打开了下载任务,当程序关闭时,下载任务也关闭了
总结:b是a的守护程序,a是被守护的进程,a要是挂了,b也就随之结束了
2、使用场景:
父进程交给了子进程一个任务,任务还没有完成父进程就结束了,子进程就没有继续执行的意义了
Eg:qq 接收到一个视频文件,于是开启了一个子进程来下载,如果中途退出了qq,下载任务就没必须要继续运行了
二、互斥锁 ——重点
1、什么是互斥锁:
互斥锁就是互相排斥的锁,当这个锁已经存在时,这个资源已经被锁了,其他进程就无法使用了。
需要强调的是: 锁 并不是真的把资源锁起来了,只是在代码层面限制你的代码不能执行
2、为什么需要互斥锁:
方案一: 加join
方案二: 给公共资源加互斥锁
互斥锁:互相排斥的锁,我在这站着你就别过来,(就是说:如果这个资源已经被锁了,其他进程就无法使用了)
互斥锁
三、IPC 进程间通讯
通讯指的就是交换数据
1、交换数据方式:
管道: 只能单向通讯,数据都是二进制,在内存上运行
文件: 在硬盘上创建共享文件
缺点:速度慢
优点:数据量几乎没有限制
socket:
编程复杂度较高
共享内存:必须由操作系统来分配 要掌握的方式*
优点: 速度快
2、共享内存的方式
1)Manager 类 ——了解
Manager所创建出来的数据结构,具备进程间共享的特点
和堆栈相反,堆栈是先存储的后取出, 就像衣柜 桶装薯片 先进后出
扩展:
函数嵌套调用时,执行顺序是先进后出,也称之为函数栈;
函数调用时 函数入栈,函数结束就出栈
实例化
就是解决某个问题套路
产生数据的一方称之为生产者
处理数据的一方称之为消费者
例如: 爬虫 生活中到处都是这种模型,饭店 厨师就是生产者 你吃饭的人就是消费者
2、生产者与消费者之间有什么问题?要解决什么问题?
生产者和消费,处理速度不平衡,一方快一方慢,导致一方需要等待另一方,造成资源浪费
要解决:供需之间效率、速度不一致的问题
3、怎么用生产者—消费者模型 解决这个问题:
1)解决思路:
原本,双方是耦合 在一起,消费着必须等待生产者 生成数据完毕后才开始处理; 反过来,如果消费者消费速度太慢,生产者必须等待其处理完毕后才能开始生成下一个数据
2)解决方案:
将双方分开来,一方专门负责生成数据,另一方专门负责处理,这样一来数据就不能直接交互了,但是双方需要一个共同的容器,生产者将生成的数据放入容器,消费者从容器中取出数据,