py并发_进程同步简述笔记
数据同步
在整个的操作系统之中每一个进程都有自己独立的数据存储单元,也就是说不同进程之间是无法直接实现数据共享的,后来依靠了管道流以及Mananger类来实现了进程之间的数据共享,那么就相当于打通了不同进程之间的限制,但是这样一来那么就会出现另外一种需求:不同的进程在操作同一个资源(或者说是某几个资源)的时候就必须去考虑到数据同步的问题了。
进程不同步所带来的问题
如果要想清楚同步的概念,那么首先一定要清楚为什么需要同步,那么既然是多个进程共享同一个资源,下面可以通过一个最为基础的售票程序来说明问题。
售票程序
1 | |
[售票员 - 1] ticket = 4
[售票员 - 0] ticket = 4
[售票员 - 2] ticket = 4
[售票员 - 1] ticket = 3
[售票员 - 0] ticket = 3
[售票员 - 2] ticket = 3
[售票员 - 0] ticket = 2
[售票员 - 1] ticket = 2
[售票员 - 2] ticket = 2
[售票员 - 0] ticket = 1
[售票员 - 1] ticket = 1
[售票员 - 2] ticket = 1
[售票员 - 0] ticket = 0[售票员 - 1] ticket = 0
[售票员 - 2] ticket = 0
[MainProcess]所有进程执行完毕,最终剩余票数:0
进程已结束,退出代码0
注:由于在余票判断和售票以及更新票数之间无论怎样都会存在时间延迟,而且各个进程之间的各个步骤都是平等的,由操作系统决定如何执行,所以三个步骤是可分的,并且多个进程的各个步骤相互交叉,变得不可控,一个进程判断可以售票,所以去售第五张票,由于还未更新数据,其它进程也都进入了售第五张票的状态,所以一张票被卖了好几次,如上,客户肯定不买这样的帐。。
同步问题引出
所有的进程都是并发执行的,所以对于一些核心数据的控制就不可能直接的给出具体的操作,例如:本次的票数获取,票数判断以及票数的修改就是一套具体的操作,但是这套操作由于没有追加上同步的限制,所以就造成了不同步的问题。
