python--操作系统介绍,进程的创建(并发)
一 . 操作系统的作用:
1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口
2:管理、调度进程,并且将多个进程对硬件的竞争变得有序
二 多道技术:
所谓多道程序设计技术,就是指允许多个程序同时进入内存并运行。即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬、软件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序。
1.产生背景:针对单核,实现并发
ps:
现在的主机一般是多核,那么每个核都会利用多道技术有4个cpu,
运行于cpu1的某个程序遇到io阻塞,会等到io结束再重新调度,会被调度到4个cpu中的任意一个,具体由操作系统调度算法决定。
2.空间上的复用:如内存中同时有多道程序
3.时间上的复用:复用一个cpu的时间片
强调:遇到io切,占用cpu时间过长也切,核心在于切之前将进程的状态保存下来,这样才能保证下次切换回来时,
能基于上次切走的位置继续运行
三 multiprocess 的简单应用
import time from multiprocessing import Process def func1(): print('我是大帅哥') time.sleep(1) print('我是宇宙无敌大帅哥') time.sleep(3) print('人称北京吴彦祖') def func2(): time.sleep(3) print('斯嘉丽.约翰逊是大美女') if __name__ == '__main__': # 必须用main f1 = Process(target=func1) # 后面不能用() f2 = Process(target=func2) f1.start() f2.start()
在进程(process)里面必须用 main 因为当执行start的时候相当于复制了一下子进程,并且是以import形式复制的,如果不main 就相当于进行了递归.
四 进程的两种传参方式
1.
import time from multiprocessing import Process def f1(n): time.sleep(2) print(f'我是{n}号大帅哥') if __name__ == '__main__': for i in range(10): p1 = Process(target=f1, args=(i,)) # args里面是元组,i 是实参,n 是形参 p1.start()
2.
from multiprocessing import Process class MyProcess(Process): # 要想使类中的init功能需要继承父类的init,在添加新功能 def __init__(self,n): # 要执行process super().__init__() self.n = n def run(self): print('宝宝and%s不可告人的事情'%self.n) if __name__ == '__main__': p1 = MyProcess('高望') p1.start()
五 join方法
import time from multiprocessing import Process def f1(): time.sleep(2) print('xxxx') def f2(): time.sleep(2) print('ssss') if __name__ == '__main__': p1 = Process(target=f1,) p1.start() p1.join() # 主进程等待子进程运行完才继续执行 print('开始p2拉') p2 = Process(target=f2,) p2.start() p2.join() print('我要等了...等我的子进程...') # time.sleep(3) print('我是主进程!!!')