python学习day35 并发编程 操作系统 进程 multiprocessing模块
http://www.cnblogs.com/Eva-J/articles/8253521.html
宏观上的并行
多道程序系统的出现,标志着操作系统渐趋成熟的阶段,开始有了空间隔离的概念——内存空间的隔离
时空复用——提高了CPU使用率
操作系统在进行切换
谁能使用CPU,是操作系统决定的
缺点:如果A计算长时间不进行I/O请求,B计算要一直等待下去
所以就出现了分时系统 我们现在大多用的就是分时系统
分时技术:把处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。
注意:分时系统的分时间片工作,在没有遇到IO操作的时候就用完了自己的时间片被切走了,这样的切换工作其实并没有提高cpu的效率,反而使得计算机的效率降低了。但是我们牺牲了一点效率,却实现了多个程序共同执行的效果,这样你就可以在计算机上一边听音乐一边聊qq了。
分布式操作系统
操作系统的作用
#一:隐藏了丑陋的硬件调用接口,为应用程序员提供调用硬件资源的更好,更简单,更清晰的模型(系统调用接口)。应用程序员有了这些接口后,就不用再考虑操作硬件的细节,专心开发自己的应用程序即可。
例如:操作系统提供了文件这个抽象概念,对文件的操作就是对磁盘的操作,有了文件我们无需再去考虑关于磁盘的读写控制(比如控制磁盘转动,移动磁头读写数据等细节),
#二:将应用程序对硬件资源的竞态请求变得有序化
例如:很多应用软件其实是共享一套计算机硬件,比方说有可能有三个应用程序同时需要申请打印机来输出内容,那么a程序竞争到了打印机资源就打印,然后可能是b竞争到打印机资源,也可能是c,这就导致了无序,打印机可能打印一段a的内容然后又去打印c...,操作系统的一个功能就是将这种无序变得有序。
进程
https://www.cnblogs.com/Eva-J/articles/8253549.html
进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。
进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展开的。
在python程序中的进程操作
所谓并发编程,就是在一个py文件里,启动多个进程
os.getpid() 获取当前python程序的进程ID
os.getppid() 获取当前python程序的进程的父进程ID
multiprocess模块
multiprocess.Process模块
Process模块是一个创建进程的模块,借助这个模块,就可以完成进程的创建。
在Windows下创建进程的代码要写在if __name__ == '__main__':下面
开启一个进程:
先看同步:
import time from multiprocessing import Process def f(name): print('hello', name) print('我是子进程') if __name__ == '__main__': p = Process(target=f, args=('bob',)) # 创建一个进程对象,args必须传一个元组 p.start() # 直到start了才有这个进程 time.sleep(1) print('执行主进程的内容了')
创建进程,异步执行:
结果:
异步阻塞:
结果:
创建进程对象,传入要执行的函数,和参数
子进程对象.start()
主进程和子进程异步执行
如果主进程汇中代码已经结束了,子进程还没结束,主进程会等待子进程
子进程对象.join() 主进程会阻塞在join的位置,等待子进程结束
此外,用类继承的方式创建子进程:
这个类必须继承Process这个类,必须实现一个run方法
开启多个子进程:
开启多个子进程时,子进程执行的顺序不确定,杂乱无章的
下面实现的功能是,开启多个子进程(子进程执行顺序杂乱无章),最后再打印主进程的东西
数据隔离
进程与进程之间的数据是隔离的
结果: