zoukankan      html  css  js  c++  java
  • 协程

    # 串行执行时间  1.2812573909759521
    # import time
    #
    #
    # def func1():
    #     for i in range(10000000):
    #         i += 1
    #
    #
    # def func2():
    #     for i in range(10000000):
    #         i += 1
    #
    #
    # start_time = time.time()
    # func1()
    # func2()
    # print(time.time() - start_time)
    
    '''
    协程是将单线程运行状态变成只有就绪态和运行态,
    用代码取消IO阻塞,实行一种检测机制,比如监测两个函数,如果一个函数遇到IO阻塞时,
    他会自动切到另一个函数,执行另一个函数的代码,另一个函数再遇到IO阻塞时,
    会再切回原来的函数,
    如果两个函数都遇到IO阻塞时,他会来回切换
    
    最佳运行状态是   多进程加多线程加协程
    '''
    
    '''
    进程:资源单位
        线程:执行单位
        协程:单线程下实现并发
    
        并发
            切换+保存状态
            ps:看起来像同时执行的 就可以称之为并发
    
        协程:完全是程序员自己意淫出来的名词
            单线程下实现并发
    
        并发的条件?
            多道技术
                空间上的复用
                时间上的复用
                    切换+保存状态
    
    程序员自己通过代码自己检测程序中的IO
    一旦遇到IO自己通过代码切换
    给操作系统的感觉是你这个线程没有任何的IO
    ps:欺骗操作系统 让它误认为你这个程序一直没有IO
    从而保证程序在运行态和就绪态来回切换
    提升代码的运行效率
    '''
    import time
    from gevent import monkey;monkey.patch_all()  # 由于该模块经常被使用 所以建议写成一行
    from gevent import spawn
    
    '''
    注意gevent模块没办法自动识别time.sleep等IO
    需要手动再配置一个参数,这个参数就是
    from gevent import monkey;monkey.patch_all()
    '''
    
    
    def heng(n):
        print('', n)
        time.sleep(2)
        print('哼哼', n + 1)
    
    
    def ha():
        print('')
        time.sleep(3)
        print('哈哈')
    
    
    def hei():
        print('')
        time.sleep(5)
        print('嘿嘿')
    
    
    start = time.time()
    obj1 = spawn(heng, 1)  # 他会自动执行函数,并监测IO  这里的传入参数的方式与进程池相近
    obj2 = spawn(ha)  # spawn会检测所有的任务
    obj3 = spawn(hei)
    obj1.join()  # 这里必须加join  不加join就会直接执行下面的代码  主进程不会等待这个进程
    obj2.join()
    obj3.join()
    print('耗时%s' % (time.time() - start))  # 耗时5.004220008850098
    # # 这样我们在单进程下实现了并发,这就是协程
  • 相关阅读:
    容器(四)实现容器的底层技术【25】
    容器(四)限制容器的 Block IO【24】
    容器(四)限制容器对CPU的使用【23】
    容器(四)限制容器对内存的使用【22】
    容器(四)一张图搞懂容器所有操作【21】
    容器(四)容器常用操作【20】
    容器(四)运行容器的最佳实践【19】
    容器(四)进入容器的方法【18】
    容器(四) 运行容器方法【17】
    51单片机学习笔记
  • 原文地址:https://www.cnblogs.com/asdaa/p/11372831.html
Copyright © 2011-2022 走看看