zoukankan      html  css  js  c++  java
  • 协程基础——理论

    定义: 纤程,微线程。协程的本质是一个单线程程序,所以协程不能够使用计算机多核资源。
    作用:
      能够高效的完成并发任务,占用较少的资源,因此协程的并发量较高
    原理:通过记录应用层的上下文栈区,实现在运行中进行上下文跳转,达到可以选择性的运行想要运行的部分,
        以此提高程序的运行效率

    优点: 

      1 消耗资源少

      2 无需切换开销

      3 无需同步互斥

      4 IO并发性好

    缺点:

      1 无法利用计算机多核

    yilde --> 协程实现的基本关键字

    有两个 第三库可以实现协程 

      1 greenlet

        g = greenlet.greenlet()

          g.switch()  选择要执行的协程事件

          

    import greenlet
    def a_1(num):
        print('1',num)
        g2.switch()
        print('2')
        g2.switch()
    def a_2():
        print('3')
        g1.switch()
        print('4')
    g1 = greenlet.greenlet(a_1)
    g2 = greenlet.greenlet(a_2)
    g1.switch(10)
    View Code ----greenlet

      2 gevent  

        1 将协程事件封装为函数

        2 生成协程对象

         gevent.spawn(func,argv)

          功能:生成协程对象

          参数: func 协程函数

              argv 给协程函数传参

          返回值:返回协程对象

        3 回收协程:

          gevent.joinall()

            功能:回收协程

            参数:列表  将要回收的协程放入列表

          geventt.sleep()

            功能:设置协程阻塞,让协程跳转

            参数:n 阻塞时间      

    import gevent,time
    def foo(a,b):
        print(a,b,'这是A,B')
        gevent.sleep(2)
        print('foo,again')
    
    def bar():
        print('run...')
        gevent.sleep(3)
        print('run bar againg')
    
    f = gevent.spawn(foo,1,2)
    g = gevent.spawn(bar)
    time.sleep(2)
    print('----')
    gevent.joinall([f,g])
    View Code--gevent

          from gevent import monkey

           monkey.patch_all()

            功能:修改套接字的IO阻塞行为

            *必须在socket导入之前使用

    下文介绍是进程和协程一起使用示例

    https://blog.csdn.net/zhongbeida_xue/article/details/53406915#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2751b6d1   python中多进程+协程的使用以及为什么要用它

              

  • 相关阅读:
    Win7 中出现图标显示不全或消失的解决方法
    动态控制ToolStrip上ToolStripButton的图标大小
    TS——类型断言
    TS——函数的类型
    TS之对象类型——接口
    TS——联合类型
    Git文件合并
    1-1、作用域深入和面向对象
    webStrom2017.1版本如何添加vue.js插件
    二:搭建一个webpack3.5.5项目:建立项目的webpack配置文件
  • 原文地址:https://www.cnblogs.com/Skyda/p/9664649.html
Copyright © 2011-2022 走看看