zoukankan      html  css  js  c++  java
  • CSIC_716_20191206【并发编程理论基础】

    进程:正在执行的一个过程,进程是对正在执行过程的一个抽象。区别于程序,

    进程的三种状态:  进程是动态的。

    就绪态ready:   进程具备运行状态,等待操作系统分配处理器

    运行状态running:进程正在占用处理器运行。  运行态的进程当遇到IO时,就会变成阻塞态,当超过时间片时,会变成就绪态

    阻塞态blocked:进程不具备运行条件,正在等待某个事件的完成

    python中开启多个进程的方法

    1、定义函数方式,开启新的子进程,但是没有手动回收子进程,注意:如果主进程和子进程能正常结束,则进程都会被回收,可以通过操作系统查看PID号主进程和子进程是异步的。

    from multiprocessing import Process
    import time
    
    
    def task(name):
        print(f'start..{name}..')
        time.sleep(3)
        print(f'end..{name}...')
    
    
    if __name__ == '__main__':
        # Process()实例化的时候,args代表target所指函数中的参数,如果没有参数,就不需要args
        pro_obj = Process(target=task, args=('reax',))  # 定义元祖,如果只有一个元素,一定要加逗号
        pro_obj.start()
        print('start主进程')
    

      

    2、开启新的子进程,并回收子进程,此时,主进程一定会等子进程执行完成,进程回收之后 join( )。

    def task(name):
        time.sleep(4)
        print(f'start..{name}..')
        time.sleep(3)
        print(f'end..{name}...')
    
    
    if __name__ == '__main__':
        # Process()实例化的时候,args代表target所指函数中的参数,如果没有参数,就不需要args
        pro_obj = Process(target=task, args=('reax',))  # 定义元祖,如果只有一个元素,一定要加逗号
        pro_obj.start()
        pro_obj.join()
        print('start主进程')
    

      

    3、通过继承Process类实现。

    from multiprocessing import Process
    import time
    
    
    class MyProcess(Process):
        def run(self):
            print(f'start...{self.name}的子进程')
            time.sleep(3)
            print(f'end...{self.name}的子进程')
    
    
    if __name__ == '__main__':
        list1 = []
    
        for line in range(2):
            obj = MyProcess()
            obj.start()
            list1.append(obj)
    
        for obj in list1:
            obj.join()
    
        print('主进程...')
    

      

    多道技术:是针对一个CPU而言,

    时间的复用:遇到IO或者时间占用过长时,会保留当前进程的状态,切换进程。 优点:CPU使用率高;缺点:程序执行效率低

    空间的复用:一个CPU可以提供给多个进程使用。

    并发:针对CPU的一个核,通过不停切换进程,造成多个进程同时运行的假象,实现伪并行。----->单核+多道技术,就可以实现并发

    并行:真正实现多个进程同时运行。一定要多核。

    同步:必须要等主动获取。

    异步:等通知或者函数回调。

    阻塞:进程挂起,什么都不做。

    非阻塞:进程未挂起,还可以处理其他事。

    异步同步反映的是执行者执行方式,同步表示执行者主动查询,异步表示自己不主动查询而是等待消息等机制通知。

    阻塞非阻塞反映的是执行者执行状态,阻塞表示执行者等待,非阻塞表示执行者不等,而是去做其他事情。

    同步阻塞、同步非阻塞、异步阻塞、异步非阻塞:

    拿网上老张喝茶为例子:
    
    同步阻塞:
    
    老张把水壶放到火上,立等水开
    
    同步非阻塞:
    
    老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有
    
    异步阻塞:
    
    老张买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。老张把响水壶放到火上,立等水开
    
    异步非阻塞:
    
    老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶
    
    总结:
    
    异步同步反映的是执行者执行方式,同步表示执行者主动查询,异步表示自己不主动查询而是等待消息等机制通知。
    
    阻塞非阻塞反映的是执行者执行状态,阻塞表示执行者等待,非阻塞表示执行者不等做其他事情。
    

      

  • 相关阅读:
    Farseer.net轻量级开源框架 中级篇:UrlRewriter 地址重写
    Farseer.net轻量级开源框架 中级篇:常用的扩展方法
    Farseer.net轻量级开源框架 中级篇:BasePage、BaseController、BaseHandler、BaseMasterPage、BaseControls基类使用
    Farseer.net轻量级开源框架 中级篇:探究ORM(Mapping)
    Farseer.net轻量级开源框架 中级篇:SQL执行报告
    xamarin ios 和 xcode 版本不匹配 xcode版本过低的问题解决
    xamarin ios for mac 相关包下载 3月17日更新
    Xamarin iOS 第三方绑定库最新爬坑历史
    Xamarin发布ios 详细流程
    9、如何在Xamarin中进行iOS真机调试和发布
  • 原文地址:https://www.cnblogs.com/csic716/p/11997309.html
Copyright © 2011-2022 走看看