进程的概念和剖析
1.操作系统的发展史(经历的三个阶段)
1.穿孔卡片 ======》2.磁带 ========》3.批处理
经历的三个阶段的变化,本质上无非是想要提高CPU的利用效率。
2.多道程序设计和单道程序设计的理念
多道程序设计:1.空间上的复用:他们共同使用一台计算机上的硬件设备。
2.时间上的复用:就拿做家务来说,你洗衣服需要45分钟,在这45分钟里你可以完成烧水10分钟的事情和30分钟的做饭两件事,但是完成的总时间是只有45分钟。
3.CPU在程序中来回切换程序进行执行
4.CPU在以下两种情况下才会切换:1.程序占用了太长时间的CPU
2.遇到了IO
多道模型图:
程序1进入 ========》=========》========》程序1结束
程序2进入:=========》========》========》程序2结束
单道程序设计:后面的程序必须等到前面的程序执行完了以后才可以进入。时间的成本是累计的
单道模型图:
程序1进入:=====》======》======》程序1结束的同时程序2进入:=====》======》=====》程序2结束的同时程序3进入:..
3.进程
进程:正在运行的程序
程序:一堆等待执行的代码
进程是一个个的实体。每个进程都有它独立的内存空间。
4.同步和异步:他们是针对提交方式来分割的
同步:一个程序提交自己的任务和请求后,在原地什么都不做等待这对方的回答!
异步:一个程序提交自己的任务和请求后,不用在原地等待,可以做自己的事情,不用等待对方的回答!
5.阻塞和非阻塞:他们是以状态来分割的
阻塞:阻塞就是遇到了IO操作,进入阻塞态
非阻塞:就是就绪态和运行态
6.开启进程的两种方式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from multiprocessing import Process import time def task(name): print('%s is running' % name) time.sleep(3) print('%s is over' % name) if __name__ == '__main__': p = Process(target=task, args=('wanglei',)) p.start()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from multiprocessing import Process import os import time class Myprocess(Process): def __init__(self, name): super().__init__() self.name = name def run(self): print('%s is running!' %self.name, os.getpid()) time.sleep(3) print('%s is over' % self.name, os.getpid()) if __name__ == '__main__': p = Myprocess('egon') p.start() print('主进程!', os.getpid())
7.进程中的join方法的声明和使用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from multiprocessing import Process import time def task(name): print('%s is running' % name) time.sleep(2) print('%s is over' % name) if __name__ == '__main__': p = Process(target=task, args=('haha',)) p.start() # p.join() # 等到子进程结束以后在执行主进程 print('主进程')