01 《没有废话!说明白点!》——协程到底是什么?

1 前言

很多人都没有把协程说太明白,文章都是在说废话一样。我看到现在也一知半解,把协程认真总结一下。

2 我的理解

2.1 文档总结

  • 线程是一个执行逻辑。

  • 线程分为内核态线程和用户态线程:

    • 内核态线程:由操作系统控制线程运行。
    • 用户态线程:由进程自己控制线程运行,本质上由内核态线程控制。

    大多时候人们谈及线程,其实是在说“内核态线程”,这也是为什么很多文档混乱的原因。后文谈及到“内核态线程”会直接写明“内核态线程”,而“线程”只代表一个执行逻辑。

  • 对于操作系统来说,其无法感知到用户态线程,所以内核态线程是CPU的执行单元

  • 线程需要被某一个更高管理者管理,则需要线程的调度方法,分为下面两种:

    • 协作式调度:当前线程完全占用CPU,除非自己让出,否则,直到运行结束,系统才执行下一个线程。管理者只掌握调度权,线程自己掌握执行权。
    • 抢占式调度:由更高管理者决定CPU下一个执行的是哪一个线程,定期的中断当前正在执行的线程,任何一个线程都不能独占。更高管理者掌握调度权和执行权。
  • 进程是由“多个数据区域 + 至少一个内核态线程”组成的一次活动。

  • 协程是一个用户态线程,采用“协作式调度”,所以称为“协程”。假如使用其他方式就不叫协程,同时很明确地认为——协程是线程。

2.2 简单总结

  • 内核态线程的执行才是进程的活动。
  • 操作系统调度管理的线程,为内核态线程
  • 内核态线程调度管理的线程,为用户态线程
  • 内核态线程使用协作式调度管理的线程,为协程

2.3 基础的协程实现

  • 两个由操作系统管理的内核态线程:
    • 执行者:用于执行协程。
    • 管理者:用于管理协程的原数据。
  • 协作式体现在“协程可以主动停止”:
    • 执行者在执行过程中不受其他影响。当协程主动退出,并给出“下一次执行该协程条件”,例如“I/O准备好”“某个变量的值为1”或者没有。当该条件符合后,管理者才会放到“可运行队列”中。
    • 和内核态线程不同的是,操作系统可以根据某种算法,主动中断其执行过程。
  • 执行者切换协程的过程:
    • 协程主动让出或运行结束。
    • 执行者保存上下文。
    • 管理者管理上下文。
    • 执行者获取下一个执行协程的上下文。
    • 执行者加载上下文。
    • 执行新协程。
  • 上下文的保存和加载操作是由Linux提供好的一个依赖,调用底层的C++库即可,其执行在用户态。

3 总结

这样的理解能匹配得上其他文档的说明,个人感觉没什么问题。有错欢迎批评。

没有废话!说明白点! 文章被收录于专栏

记录一下我在学习后端中遇到的那些难以理清楚的知识

全部评论
说的有点复杂了,协程本质上就是一种用户级线程,由用户程序管理,对于操作系统来说,协程的切换操作系统是无感知的,所以这就节省了从用户态切换到内核态的资源消耗。多个用户级线程或者说协程可以运行到同一个线程上。其实相当于提供协程能力的编程语言,由在操作系统之上给开发者抽象了一层,构建了协程这种模型。屏蔽了底层操作系统线程的调度。
点赞 回复 分享
发布于 03-01 19:58 北京
好!
点赞 回复 分享
发布于 2024-08-05 17:32 四川

相关推荐

03-26 15:18
已编辑
华北水利水电大学 Java
点赞 评论 收藏
分享
吾族血脉,自吾始立铁律:凡我子孙,胆敢研习计算机之术者,当受七窍流血之刑!若见Python之书,必遭雷殛;若触Java代码,定为不孝!键盘鼠标准入族谱秽物录,显示器乃摄魂邪镜祖祠前当立戒碑:"二进制者,断子绝孙之道也!"算法者,乱我族心智之毒也!数据结构,毁我门风之刃也!倘有逆子偷装 vscode,即按祖规捆于祠堂梁柱,令其DEBUG至死不得解脱!今颁天条三则:壹)三代血亲不得报考计算机系违者削去辈分,永世称码奴贰)族中幼童须背《戒算经》"if-else咒,switch符,皆是断头术"叁)凡见子侄讨论编程者须即刻砸其电脑,焚其书籍泼黑狗血于键盘之上!太祖母口谕:"吾宁要文盲孙,不要程序员!"尔...
好吃的薯饼:姐妹这不是我们计算机系吧,我们计算机系的都在言情小说里当黑客大佬,各种竞赛拿奖拿到手软,公司系统道路监控随便入侵。身体线条非常优美,挺拔的站姿十分端正,给人以强壮有内涵的感觉。脸庞轮廓深刻,五官分明透露着对太阳底下最光辉的职业的向往和坚定,尤其是那双深邃的眼睛,写满了对代码和计算机系统的热情和无限的活力。我们计算机系是天之骄子、明日之星,人手一个博士学位不然高中电脑老师都当不上。组会的时候,面对导师和同事的疑难问题,也能够回答自如。我们总是把高高的发际线当做荣耀的象征。妈咪这不素我们计算机系吧,集美集帅怎么只会写hello world?
点赞 评论 收藏
分享
评论
3
6
分享

创作者周榜

更多
牛客网
牛客企业服务