协程,又名微线程,纤程。
子程序(函数),在所有语言中都是层级调用的。
子程序调用是通过栈实现的,一个线程就是执行一个子程序。
子程序调用一个入口,一次返回,调用顺序是明确的。
协程也是子程序,但是它的调用和子程序不同。协程在执行过程中可以中断,转而执行别的子程序,在适当的时候在返回接着执行。
协程的优点:
1、协程的执行效率极高。多线程执行时,线程之间需要切换,而协程不要切换,是在一个线程中执行。
2、为了保证数据的安全性,防止同时读写变量冲突,多线程之间需要加锁;而协程中控制资源共享不需要加锁,判断状态即可,所以协程的效率比多线程高。
协程和多进程各有其优点,在程序开发中,为了发挥多核CPU的优势,我们通常采用 多进程+ 协程的开发模式。
在充分利用多核的情况下,又充分发挥协程的高效率,使程序的性能达到最优。
#使用协程实现经典的生产者-消费者模型
def consumer():
res = ''
while True:
n = yield res
if not n:
return
print('[CONSUMER] consuming %s.....' % n)
res = '200 ok'
def produce(c):
c.send(None)
n = 0
while n < 5:
n = n + 1
print('[PRODUCE] produceing %s.....' % n)
r = c.send(n)
print('[CONSUMER] consumer return %s.....' % r)
c.close()
c = consumer()
produce(c)
网友评论