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)
  • 相关阅读:
    git 学习笔记
    参看gitlab版本号
    PHP7.1安装xdebug
    言不由衷
    容器镜像上传和下载
    利用docker搭建ubuntu+nginx+PHP容器
    生产者消费者模式(转)
    白盒测试以及基路径法测试
    分页的简单实现
    排列2(全排列next_permutation 注意格式)
  • 原文地址:https://www.cnblogs.com/huangxm/p/5716831.html
Copyright © 2011-2022 走看看