协程
2016-07-29 00:17
197 查看
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)
相关文章推荐
- 有名管道
- 我的面试宝典(4):面试问题早准备
- 开发者需要了解的WebKit
- 机器学习之神经网络模型-下(Neural Networks: Representation)
- 编程实现计算器
- 找出一个字符串中最长重复次数的子字符串,并计算其重复次数
- Linux内核体系结构
- 产品经理七个局——破局之术
- 我的C++实践(16):引用计数实现
- 机器学习之单变量线性回归(Linear Regression with One Variable)
- [NewCode 4] 替换空格
- 面向对象设计原则
- 有名管道_3
- Linux网络编程6——使用TCP实现文件服务器
- [LeetCode] Combination Sum II
- [NewCode 5] 从尾到头打印链表
- 23种设计模式分析(5):行为型模式
- [算法专题] stack
- Linux之select系统调用_2
- 去除字符串中单词的多余空格