【总结笔记】对协程的理解

代码层面理解协程

协程函数【函数只是协程的一种特例,协程的本质是可以被暂停以及被恢复运行的函数】:

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)含有协程的程序执行流可以比线程多。协程的高并发能力关键在于,我们可以开多个协程,且每个线程可以设置多个返回点,因此可以有许多种执行流。

posted @   MasterBean  阅读(79)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示