一、协程的概述

  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()
View Code

相关文章: