zoukankan      html  css  js  c++  java
  • 协程

    1. 执行效率极高。因为子程序切换不是线程切换,而是由程序自身控制,因此没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。

    2. 不需要多线程的锁机制, 因为只有一个线程,不存在写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了。

    协程始终只是一个线程执行,那如何得用多核CPU呢? 最简单的办法就是多进程+协程, 可获得极高的性能、python对协程的支持是通过generator实现的。

    在生成器generator中, 可以通过for来迭代,也可以通过next()获取由yield语句返回的下一个值。

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

    yield实现肥波纳妾:

    def fb():
        a, b = 0, 1
        c = 0
        while True:
            yield c
            c = a + b
            a, b = b, c
    
    if __name__ == "__main__":
        tmp = fb()
        for i in range(0, 10):
            result = tmp.__next__()
            priint(result)

    生产者消费者模型:

    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)
  • 相关阅读:
    缓存小记
    ffplay源码分析(转)
    (转)Qt之QNetworkProxy(网络代理)
    pcm编码为aac后播放变快且模糊
    Qt常用控件(转)
    Qml(二)Quick基本组件
    QML(一)HelloWorld
    C++ MySQL连接及增删改查操作
    Linux ar打包静态库 plugin needed to handle lto object 问题
    Qt笔记(二)linux下Qt安装使用
  • 原文地址:https://www.cnblogs.com/huangxm/p/5716831.html
Copyright © 2011-2022 走看看