【总结笔记】对协程的理解
代码层面理解协程
协程函数【函数只是协程的一种特例,协程的本质是可以被暂停以及被恢复运行的函数】:
void func() {
print("a")
yield
print("b")
yield
print("c")
}
主函数:
def A():
co = func() # 得到该协程
next(co) # 调用协程
print("in function A")
next(co) # 再次调用该协程
输出:
a
in function A
b
协程函数与普通函数的区别
调用普通函数都是从第一条指令开始,一直到结束;而协程是从上一次挂起点开始执行的,到下一个挂起点结束
协程与线程的区别
相同点
协程会在函数被暂停运行时保存相关的上下文信息,并可以从上下文信息恢复并继续运行;
线程阻塞或挂起时,操作系统也会保存其栈帧信息
差异点
(1)协程上下文信息保存在堆区【因此操作系统感受不到协程的存在,且协程切换的开销小】,线程上下文信息保存在栈区【线程切换的开销大】;
(2)协程的内存大小更灵活,线程往往比协程大(例如一个线程 4MB,但一个协程可能只有 4KB),一个进程可以开多个协程,但只可以开少数线程;
(3)含有协程的程序执行流可以比线程多。协程的高并发能力关键在于,我们可以开多个协程,且每个线程可以设置多个返回点,因此可以有许多种执行流。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~