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)