协程又被称为微线程,它的特点是不需要进行线程的切换,因为整个程序的执行过程中,只有一个线程.没有线程切换的开销,和多线程相比较,线程数量越多,协程的性能就越高.它子程序的执行是由程序自身控制.又由于只存在一个线程,所以不存在什么变量共享等冲突问题,也不存在锁机制,更不会出现死锁的情况.这样一来,执行效率就比多线程高的多.为了有效利用多核CPU,我们可以用进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。
看例子:
传统的生产者-消费者模型是一个线程写消息,一个线程取消息,通过锁机制控制队列和等待,但一不小心就可能死锁。
如果改用协程,生产者生产消息后,直接通过yield跳转到消费者开始执行,待消费者执行完毕后,切换回生产者继续生产,效率极高:
# 注意 变成generator的函数,在首次调用的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
def consumer():
r = ''
print('lalalalalaal') # 只有第一次会执行(启动生成器), 之后再调用生成器就会从yield处执行
while True:
n = yield r

最低0.47元/天 解锁文章
975

被折叠的 条评论
为什么被折叠?



