同步异步复习和新内容锁,信号,时间机制
课程回顾:
并行: 两个进程在同一时间点发生
并发: 两个进程在同一时间间隔内运行
同步: 某一个任务的执行必须依赖另一个任务的返回值
异步: 某一个任务的执行,不需要依赖于另一个任务的返回,只需要告诉另一个任务一声
阻塞: 程序因为类似于IO等待,等待事件等导致无法继续执行
非阻塞: 程序遇到类似于IO操作时,不在阻塞等待,如果没有及时的处理IO,就报错或者跳过等其他操作
进程的方法和属性:
方法: start() 开启一个子进程
join 异步变同步,让父进程等待子进程的执行结束,再继续执行
is_alive 判断进程是否还活着
terminate 杀死进程
属性:
name 子进程的名字
pid 子进程的pid
daemon 设置进程为守护进程,给一个True代表为守护进程,默认为False
守护进程:
特点:
随着父进程的代码执行完毕才结束
守护进程不能创建子进程
守护进程必须要在start之前设置
IPC -- inter process Communication 进程之间通信
今天内容:
学习锁机制
l=Lock()
一把钥匙配一把锁
拿钥匙,开门 l.acquire()
还钥匙,锁门 l.release()
学习信号机制
sem = Semaphore(n)
n:是指初始化一把锁配几把钥匙,一个int型
拿钥匙,锁门 l.acquire()
换钥匙,开门 l.release()
信号量机制比锁机制多了一个计数器,这个计数器是用来记录当前剩余几把钥匙
当计数器为0时,表示没有钥匙了,此时acquire()处于阻塞
对于计数器来说,没acquire一次,计数器内部就减1,release()一次,计数器就加1
学习事件机制
e = Event()
e.set() #将is_set()设为True
e.clear() #将is_set设为False
e.wait() #判断is_set的值,如果bool为True,则非阻塞,bool值为False,则阻塞
e.is_set #标识
事件是通过is_set()的bool值,去标识e.wait()的阻塞状态
当is_set()的bool值为False时,e.wait()是阻塞状态
当is_set()的bool值为True时,e.wait()时非阻塞状态
当使用set()时,是把is_set的bool变为True
当使用clear()时,是吧is_set的bool变为 False