如何理解高并发中的协程
![](https://filescdn.proginn.com/f1fdfdea401bb625f43ad928295b9a00/f5cd5f28b1b4d303721b5b0fa136e198.webp)
普通的函数
def func():
print("a")
print("b")
print("c")
调用func func开始执行,直到return func执行完成,返回函数A
a
b
c
![](https://filescdn.proginn.com/69201df5ec740d50382aa767f7f3806a/d7be705267885a7234849534e6c07c02.webp)
从普通函数到协程
void func() {
print("a")
暂停并返回
print("b")
暂停并返回
print("c")
}
void func() {
print("a")
return
print("b")
暂停并返回
print("c")
}
void func() {
print("a")
定
print("b")
定
print("c")
}
![](https://filescdn.proginn.com/c3810508a98c689c6d0bdd40eb92836e/bae9b7b58a860811a075363b99e12bf6.webp)
Show Me The Code
void func() {
print("a")
yield
print("b")
yield
print("c")
}
def A():
co = func() # 得到该协程
next(co) # 调用协程
print("in function A") # do something
next(co) # 再次调用该协程
a
a
in function A
a
in function A
b
图形化解释
![](https://filescdn.proginn.com/3d069215cab76e230e92674f2868be41/9d0b5f70cf17746206c90b4a97594792.webp)
![](https://filescdn.proginn.com/034a46a50f52e395f44c2baf91fa6206/82e90f8b8c0809dd3bac9b1f9d162904.webp)
![](https://filescdn.proginn.com/ab8f71c9bb683612193048ed6ab41aed/b4f2011003d0278c442ee3244c954ac2.webp)
函数只是协程的一种特例
![](https://filescdn.proginn.com/ecd8f025fb966b769a256bb4f867b53f/89e31f94b43260cc8b21b841370c56fa.webp)
协程的历史
协程是如何实现的
![](https://filescdn.proginn.com/affd7f89439d26520fbe8a68afcc44a8/cc6a3ec604b877119381b9a401d2efe4.webp)
![](https://filescdn.proginn.com/2c19709bbc5881ddb2550c59d6db3754/da827f95dec6126be2a85de066f12c1d.webp)
![](https://filescdn.proginn.com/f1fdfdea401bb625f43ad928295b9a00/f5cd5f28b1b4d303721b5b0fa136e198.webp)
![](https://filescdn.proginn.com/7ea61c1ab4b8e17683541ea62d815c7f/613fe4ec9eeb286516d851ac383c31f5.webp)
一个普通线程
两个协程
![](https://filescdn.proginn.com/956c9ac3daf8d2c183e6a1c6385ee4d8/909da5729986974b8bb0acc93e0f0e4f.webp)
总结
![](https://filescdn.proginn.com/6a9e1fe2492006c6c0e5b4b6e795ca29/7e3ce9f91f7b83532396321228c581f3.webp)
评论