zoukankan      html  css  js  c++  java
  • 协程

    子程序

    子程序(函数)在所有语言中都是层级调用,比如A 调用B,B调用C,C执行完毕返回,B执行完毕返回,最后A执行完。

    子程序调用是通过栈实现,一个线程执行一个子程序。

     

    协程

    看上去也是子程序,执行时,在程序内部可中断(不是函数调用,有点类似于CPU中断),转去执行别的子程序,在适当的时候再返回来接着执行。

    协程的特点在于是一个线程执行。

     

    协程的优势:

      1极高的执行效率,因为子程序切换不是线程切换,因此没有线程切换的开销。

      2不需要多线程的锁机制。在协程中控制共享资源不加锁,只需要判断状态就好了。

     

    协程是一个线程执行,那怎么利用多核CPU?多进程+协程

     

    python对协程的支持是通过generator实现的。

    在generator中,可以通过调用next()函数获取有yield语句返回的下一个值。

    python的yield语句不但可以返回一个值,还可以接收调用者发出的参数。!!

     

    Python生成器generator之next和send运行流程

     

    生产者-消费者案例:

     

    def consumer():
        r = ''
        while True:
            n = yield r
            if not n:
                return
            print('[CONSUMER] Consuming %s...' % n)
            r = '200 OK'
    
    def produce(c):
        c.send(None)
        n = 0
        while n < 5:
            n = n + 1
            print('[PRODUCER] Producing %s...' % n)
            r = c.send(n)
            print('[PRODUCER] Consumer return: %s' % r)
        c.close()
    
    c = consumer()
    produce(c)

     输出:

    [PRODUCER] Producing 1...
    [CONSUMER] Consuming 1...
    [PRODUCER] Consumer return: 200 OK
    [PRODUCER] Producing 2...
    [CONSUMER] Consuming 2...
    [PRODUCER] Consumer return: 200 OK
    [PRODUCER] Producing 3...
    [CONSUMER] Consuming 3...
    [PRODUCER] Consumer return: 200 OK
    [PRODUCER] Producing 4...
    [CONSUMER] Consuming 4...
    [PRODUCER] Consumer return: 200 OK
    [PRODUCER] Producing 5...
    [CONSUMER] Consuming 5...
    [PRODUCER] Consumer return: 200 OK

      

     
    如有疑问请联系我,写的不对的地方请联系我进行更改,感谢~ QQ:1968380831
  • 相关阅读:
    20165211 2017-2018-2 《Java程序设计》第1周学习总结
    nginx解析漏洞
    Killable Processes in Oracle Database
    Know more about PGA_AGGREGATE_LIMIT 12c 19c
    mysql查看存储过程函数
    oracle 12.1.0.2升级oracle12.2.0.1(non cdb)
    MySQL 一张表单个索引最多支持创建16个字段
    AWR automatic or manual snapshot hangs – EXADATA
    创建表时报错,索引列超过最大约束
    mysql while 循环
  • 原文地址:https://www.cnblogs.com/1zhangwenjing/p/7746167.html
Copyright © 2011-2022 走看看