当前位置:   article > 正文

协程的底层实现原理_协程的底层原理

协程的底层原理

协程简介

  • 线程是进程的执行体,拥有一个执行入口,以及从进程虚拟地址空间分配的栈信息,包括用户栈和内核栈
  • 操作系统会记录线程控制信息
  • 线程获得CPU时间片以后才可以执行
  • CPU切换对应线程的栈基、栈指针、指令指针等寄存器
  • 如果线程各自创建几个执行体,给他们各自指定执行入口,申请一些内存分配给他们做执行栈,那么线程就可以按需调度这几个执行体了
  • 为了实现这几个执行体的切换,线程也需要记录执行体的信息,包括ID、栈的位置、执行入口地址、执行现场等等
  • 线程可以选择一个执行体来执行,此时CPU中指令指针就会指向这个执行体的执行入口,栈基和栈指针寄存器也会指向线程给他分配的执行栈
  • 要切换执行体时,需要先保存当前执行体的执行现场,然后切换到另一个执行体,通过同样的方式可以恢复到之前的执行体,这样就可以从上次执行中断的地方继续执行
  • 这些由线程创建的执行体就叫做“协程,因为用户程序不能操作内核空间,所以只能给协程分配用户栈,二操作系统对协程一无所知,所以协程又被称为“用户态线程”

在这里插入图片描述

  • 无论协程怎么被创建,底层都要分配执行栈和控制信息
  • 让出执行权时候,都要保存执行现场,以便后续回复

在这里插入图片描述

协程关键—>控制流的让出和恢复

  • 每个协程又自己的执行栈,可以保存自己的执行现场
  • 可以由用户程序按需创建协程
  • 协程“主动让出”执行权时候,会保存执行现场,然后切换到其他协程
  • 协程恢复执行时候会根据之前保存的执行现场恢复到中断前的状态,继续执行,这样就通过协程实现了既轻量又灵活的由用户态调度的多任务模型

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/212350?site
推荐阅读
相关标签
  

闽ICP备14008679号