一、协程的概述
1.1 定义:
1. 单线程下的并发,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程
2. 线程属于内核级别的,即由操作系统控制调度,协程属于应用程序级别(而非操作系统)控制切换
1.2 协程的本质:
在一个线程中,多个任务遇到IO操作时,相互借切换轮流使用cpu,减小开销,增加执行效率
多个协程的本质是一条线程(单线程),所以多个协程不能利用多核
1.3 比较:
IO密集型应用: 多进程->多线程->事件驱动->协程
CPU密集型应用: 多进程-->多线
二、 yield的协程机制
生产者与消费者模型示例:
# 程序之间的相互转换调用-->协程 # 消费者 def consumer(): while True: n = yield # 每次获取一个值,挂起 print(n) # 生产者 def producer(): g = consumer() next(g) for i in range(100): g.send(i) # 每次传递一个值给到consumer # 并发执行,但是任务producer遇到io就会阻塞住,并不会切到该线程内的其他任务去执行 # 调用生产者函数,模拟协程 producer()