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

接下来,我们结合项目代码目录来说一下协程的核心框架结构。项目地址:
GitHub - skyfireitdiy/cocpp at cocpp-0.1.0
协程调度的主体框架在include/core(声明)和source/core(实现)中。本节中我们只是了解 cocpp 的整体框架,不需要了解实现,因此不需要关注 source 目录。
在include/core目录中有很多头文件,本节我们只关注co_ctx.h,co_env.h和co_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)
上面仅罗列了与调度相关的核心成员,实际在这三个类的定义中还有其他不少成员,比如控制协程休眠的睡眠控制器、管理状态的状态管理器、用于多协程共享的共享栈内存等,但是他们与核心调度的联系并不是特别紧密,这些成员到以后专门的章节再进行介绍。
整体结构
ctx、env与manager的整体结构如下图:
ctx在env下调度,每个env与一个内核线程关联,env由manager统一管理。
总结
本文介绍了 cocpp 的核心架构,主要是协程上下文 ctx,协程运行环境 env,管理器 manager,这三个结构是一切的基础,后面介绍的各种功能、组件都是在这三个核心数据结构之上搭建起来的。
版权声明: 本文为 InfoQ 作者【SkyFire】的原创文章。
原文链接:【http://xie.infoq.cn/article/7748bf243070e832d2b10d64f】。文章转载请联系作者。











评论