day30 操作系统介绍 进程的创建

时间:2023-03-10 00:41:51
day30 操作系统介绍 进程的创建

今日内容

一.操作系统的简单介绍

二,并发与并行

三.同步异步阻塞非阻塞

四.multiprocess模块

1. 操作系统的简单介绍

多道技术(重点)

  空间复用:

  时间复用:

  进程之间是空间隔离的

分时系统

实时系统

通用操作系统

2.并发与并行

并发: 伪并行,看着像同时运行,其实是任务之间的来回切换(遇到阻塞现象io会提高代码的效率)

两个要记的现象:任务切换+保存状态(保存现场)

并行:真正的同时运行,应用的是多核技术(多个CPU)

进程的三状态: 就绪(等待操作系统调度去CPU里面执行) ,执行,阻塞三种状态之间切换

阻塞:

    事件请求:input、sleep、文件输入输出、recv、accept等

    事件发生:sleep、input等完成了

    时间片到了之后有回到就绪状态,这三个状态不断的在转换。

3.同步异步阻塞非阻塞

提交任务的方式: 同步 异步 任务的执行状态: 阻塞 非阻塞

  异步:任务的提交方式,多个任务提交出去,同时执行

同步阻塞: 程序一个一个往下进行,阻塞了也得等着(好比一群人在排队,每个人只能排队,而且不能做别的事情)

异步阻塞: 异步操作是可以被阻塞的,只不过他不是在处理消息的时候阻塞,而是在等待消息通知时被阻塞.(好比一群人不用排队,但是领了号在那里坐着,只能坐着,不能做别的事情)

同步非阻塞: 实际上是效率低下的。想象一下你一边打着电话一边还需要抬头看到底队伍排到你了没有,如果把打电话和观察排队的位置看成是程序的两个操作的话,这个程序需要在这两种不同的行为之间来回的切换,效率可想而知是低下的。

异步非阻塞: 效率更高. 比如说,这个人突然发觉自己烟瘾犯了,需要出去抽根烟,于是他告诉点餐员说,排到我这个号码的时候麻烦到外面通知我一下,那么他就没有被阻塞在这个等待的操作上面,自然这个就是异步+非阻塞的方式.
4.multiprocess模块

格式

from Muletprocessing import Process

进程创建的两种方式:
1). Process(target=f1,args=(n,))# 这里的args接收的是元祖类型
#kwargs={key:值} 或者kwargs接收到的是字典 2).class Myprocess(process):
def __init__(self,n):
#相当于执行process中的__init__()
  super().__init__()
  self.n=n
  def run(self):
    pass if __name__='__main__':
  #创建对象
  M=Myprocess(参数)
  #相当于M执行run
  M.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,)
p2 = Process(target=f2,)
p1.start()
p2.start()
# 主进程等待子进程运行完才继续执行 # p1=Process(target=f1,)
# p1.start()
# p1.join()
# print('开始p2啦') # p2 = Process(target=f2,)
# p2.start()
# p2.join()
# print('我要等了...等我的子进程...')
# time.sleep(2)
# print('我是主进程!!!')

for 循环:

import time
import multiprocessing import Process def func(i):
time.sleep(3)
print(i) if __name__='__main__':
for i in range(20):
p1=process(target=func,args=(i,))
p1.start() # 此时代码执行的for循环是创建了20个数字,执行了func函数