写点什么

一个 cpp 协程库的前世今生(三)cocpp 的核心框架结构

作者:SkyFire
  • 2021 年 12 月 31 日
  • 本文字数:813 字

    阅读完需:约 3 分钟

一个cpp协程库的前世今生(三)cocpp的核心框架结构

接下来,我们结合项目代码目录来说一下协程的核心框架结构。项目地址:


GitHub - skyfireitdiy/cocpp at cocpp-0.1.0


协程调度的主体框架在include/core(声明)和source/core(实现)中。本节中我们只是了解 cocpp 的整体框架,不需要了解实现,因此不需要关注 source 目录。


include/core目录中有很多头文件,本节我们只关注co_ctx.hco_env.hco_manager.h,这三个文件是协程调度的核心,分别对应三个重要概念:上下文、运行环境、管理器。

上下文

co_ctx.h中定义了co_ctx类,每个co_ctx对应一个协程,co_ctx中保存了与其关联协程的一些状态信息,与调度相关的主要有:


  • 栈内存(stack__

  • 运行环境(下文介绍)(env__

  • 入口函数(entry__

  • 寄存器信息(regs__

运行环境

co_env.h中定义了co_env类,每个co_env对应一个系统线程,是ctx的实际运行环境。与调度相关的主要函数与成员主要有:


  • 关联的线程(worker__

  • 当前协程(curr_ctx__

  • 新增协程(add_ctx

  • 开始调度(start_schedule

  • 切换协程(schedule_switch

管理器

co_manager.h中定义了co_manager类,co_manager负责协程环境和协程上下文的统一管理,包括协程环境与上下文的创建、删除,协程环境的动态伸缩、监控等。与调度相关的主要函数与成员有:


  • 环境集(env_set__

  • 创建环境(create_env

  • 创建并开始调度协程上下文(create_and_schedule_ctx


上面仅罗列了与调度相关的核心成员,实际在这三个类的定义中还有其他不少成员,比如控制协程休眠的睡眠控制器、管理状态的状态管理器、用于多协程共享的共享栈内存等,但是他们与核心调度的联系并不是特别紧密,这些成员到以后专门的章节再进行介绍。

整体结构

ctxenvmanager的整体结构如下图:



ctxenv下调度,每个env与一个内核线程关联,envmanager统一管理。

总结

本文介绍了 cocpp 的核心架构,主要是协程上下文 ctx,协程运行环境 env,管理器 manager,这三个结构是一切的基础,后面介绍的各种功能、组件都是在这三个核心数据结构之上搭建起来的。

发布于: 3 小时前
用户头像

SkyFire

关注

这个cpper很懒,什么都没留下 2018.10.13 加入

会一点点cpp的苦逼码农

评论

发布
暂无评论
一个cpp协程库的前世今生(三)cocpp的核心框架结构