协程 1.协程
作者:互联网
协程
协程
协程(Coroutine)又叫微线程,协程就是可以执行暂停的函数
线程和进程的操作是由程序触发系统接口,最后的执行者是系统,协程的操作者是程序员
协程是一个特殊的生成器
协程的作用
在不开辟新线程的基础上实现多任务
对于多线程应用,CPU通过切片来切换线程间的执行,线程切换需要耗时(保存状态),协程只使用一个线程,在线程中规定代码块执行顺序
适用场景
当程序中存在大量不需要CPU的操作(IO),适用协程
一个线程中的某个函数可以在任何时间保存当前函数的临时变量等信息,然后切换到另一个函数中执行,而非通过函数调用
切换的次数、时间都由开发者确定
协程和线程的区别
多线程请求返回是无序的,哪个线程有数据返回就处理哪个线程,而协程返回的数据是有序的
实现多任务时,线程切换在系统层面远不止保存和恢复CPU上下文那么简单
操作系统为了程序运行的高效,每个线程都有自己的缓存Cache等数据,操作系统需要做这些数据的恢复等操作
线程的切换非常消耗性能,但是协程的切换只是单纯的操作CPU的上下文
协程的底层实现方式
1.创建生成器work1
2.创建生成器work2
3.获取两个生成器,使用next()分别调用生成器
import time
# 生成器work1
def work1():
while True:
print('work1----------')
yield
time.sleep(0.5)
# 生成器work2
def work2():
while True:
print('----------work2')
yield
time.sleep(0.5)
# 调用生成器
if __name__ == '__main__':
w1 = work1()
w2 = work2()
while True:
next(w1)
next(w2)
work1----------
----------work2
work1----------
----------work2
work1----------
----------work2
标签:协程,生成器,线程,----------,work1,work2 来源: https://www.cnblogs.com/HyeJeong/p/15690915.html