py并发_线程同步笔记
线程同步
多线程编程是可以直接共享一个进程之内的全部资源(相比较多进程的同步处理来讲,多线程的同步处理需求更加迫切)对于整个的线程同步处理,也是提供有各种同步处理类(threading作为新一代线程实现模块):Lock&RLock(锁)、Event(同步事件)、Seamphore&BoundedSemaphore(信号量)、Barrier(栅栏)。
测试
信号量
1 | |
[银行客户 - 0]资源抢占成功,开始办理个人业务…
[银行客户 - 1]资源抢占成功,开始办理个人业务…
[银行客户 - 2]资源抢占成功,开始办理个人业务…
[银行客户 - 3]资源抢占成功,开始办理个人业务…[银行客户 - 4]资源抢占成功,开始办理个人业务…
[银行客户 - 5]资源抢占成功,开始办理个人业务…
[银行客户 - 7]资源抢占成功,开始办理个人业务…[银行客户 - 6]资源抢占成功,开始办理个人业务…
[银行客户 - 8]资源抢占成功,开始办理个人业务…
[银行客户 - 9]资源抢占成功,开始办理个人业务…
进程已结束,退出代码0
锁机制
在整个的线程同步处理机制之中最为原始的处理方式就是Lock,但是传统的Lock有一个设计的问题,如果该操作被重复进行锁定,那么如果没有进行指定次数的解锁,则会产生死锁的情况,这个时候为了解决可能造成的控制问题,提供了RLock类,这种类最大的优势在于不管锁定多少次,直接一次可以全部解锁。
RLock实现资源处理多线程同步
1 | |
[售票员 - 0]卖票,剩余票数:2
[售票员 - 1]卖票,剩余票数:1
[售票员 - 2]卖票,剩余票数:0
进程已结束,退出代码0
对于所有的锁的处理本身的核心思想就是:获取锁&等待、锁定、释放锁,这一系列的操作流程就构成了同步的处理机制,不管如何进行同步的处理,那么同步永远都会存在有性能问题。
py并发_线程同步笔记
https://blog.wangxk.cc/2020/02/03/py并发-线程同步笔记/