zoukankan      html  css  js  c++  java
  • 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函数
      
    

      

  • 相关阅读:
    一个粗心造成的死循环
    LinearGradientBrush使用
    一个需求引发的关于平板电脑的思考
    开发照片采集系统中的问题总结
    List<T>的Add方法等
    开发相机拍照组件中需要解决的问题,一月回顾
    ShowDialog使用
    使用ActiveSyn,让WINMBILE的PDA连接WIN2003的杂牌蓝牙
    Jenkins安装教程
    Jmeter连接数据库
  • 原文地址:https://www.cnblogs.com/zty1304368100/p/10240888.html
Copyright © 2011-2022 走看看