python学习day35 并发编程 操作系统 进程 multiprocessing模块

操作系统发展史

http://www.cnblogs.com/Eva-J/articles/8253521.html

 

宏观上的并行

多道程序系统的出现,标志着操作系统渐趋成熟的阶段,开始有了空间隔离的概念——内存空间的隔离

时空复用——提高了CPU使用率

操作系统在进行切换

谁能使用CPU,是操作系统决定的 

 

缺点:如果A计算长时间不进行I/O请求,B计算要一直等待下去

所以就出现了分时系统  我们现在大多用的就是分时系统

分时技术:把处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。

特点:
  (1)多路性。若干个用户同时使用一台计算机。微观上看是各用户轮流使用计算机;宏观上看是各用户并行工作。
  (2)交互性。用户可根据系统对请求的响应结果,进一步向系统提出新的请求。这种能使用户与系统进行人机对话的工作方式,明显地有别于批处理系统,因而,分时系统又被称为交互式系统。
  (3)独立性。用户之间可以相互独立操作,互不干扰。系统保证各用户程序运行的完整性,不会发生相互混淆或破坏现象。
  (4)及时性。系统可对用户的输入及时作出响应。分时系统性能的主要指标之一是响应时间,它是指:从终端发出命令到系统予以应答所需的时间。
分时系统的主要目标:对用户响应的及时性,即不至于用户等待每一个命令的处理时间过长。

注意:分时系统的分时间片工作,在没有遇到IO操作的时候就用完了自己的时间片被切走了,这样的切换工作其实并没有提高cpu的效率,反而使得计算机的效率降低了。但是我们牺牲了一点效率,却实现了多个程序共同执行的效果,这样你就可以在计算机上一边听音乐一边聊qq了。

 

 

 

分布式操作系统

  表面上看,分布式系统与计算机网络系统没有多大区别。分布式操作系统也是通过通信网络,将地理上分散的具有自治功能的数据处理系统或计算机系统互连起来,实现信息交换和资源共享,协作完成任务。——硬件连接相同。
  但有如下一些明显的区别:
  (1)分布式系统要求一个统一的操作系统,实现系统操作的统一性。
  (2)分布式操作系统管理分布式系统中的所有资源,它负责全系统的资源分配和调度、任务划分、信息传输和控制协调工作,并为用户提供一个统一的界面。
  (3)用户通过这一界面,实现所需要的操作和使用系统资源,至于操作定在哪一台计算机上执行,或使用哪台计算机的资源,则是操作系统完成的,用户不必知道,此谓:系统的透明性。
  (4)分布式系统更强调分布式计算和处理,因此对于多机合作和系统重构、坚强性和容错能力有更高的要求,希望系统有:更短的响应时间、高吞吐量和高可靠性。

 

 

操作系统的作用

#一:隐藏了丑陋的硬件调用接口,为应用程序员提供调用硬件资源的更好,更简单,更清晰的模型(系统调用接口)。应用程序员有了这些接口后,就不用再考虑操作硬件的细节,专心开发自己的应用程序即可。
例如:操作系统提供了文件这个抽象概念,对文件的操作就是对磁盘的操作,有了文件我们无需再去考虑关于磁盘的读写控制(比如控制磁盘转动,移动磁头读写数据等细节),

#二:将应用程序对硬件资源的竞态请求变得有序化
例如:很多应用软件其实是共享一套计算机硬件,比方说有可能有三个应用程序同时需要申请打印机来输出内容,那么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方法

 

 

 

开启多个子进程:

开启多个子进程时,子进程执行的顺序不确定,杂乱无章的

下面实现的功能是,开启多个子进程(子进程执行顺序杂乱无章),最后再打印主进程的东西

 

 

数据隔离

进程与进程之间的数据是隔离的

 

 结果:

 

posted @ 2019-03-05 13:27  xyfun72  阅读(199)  评论(0编辑  收藏  举报