languages os stars forks pypi CodeFactor
中文 | English Readme | deepwiki
CGraph is a cross-platform Directed Acyclic Graph framework based on pure C++ without any 3rd-party dependencies.
You, with it, can build your own operators simply, and describe any running schedules as you need, such as dependence, parallelling, aggregation, conditional and so on. Python APIs are also supported to build your pipeline.
Tutorials and contact information are shown as follows. Please get in touch with us for free if you need more about this repository.
CGraph
中文名为【色丶图】,是一套无任何第三方依赖的跨平台图流程执行框架。通过GPipeline
(流水线)底层调度,提供了包含依赖元素依次执行、非依赖元素并发执行,支持暂停、恢复、超时设定的 eDAG
调度功能。
使用者只需继承GNode
(节点)类,实现子类的run()
方法,并根据需要设定依赖关系,即可实现任务的图化执行或流水线执行。还可以通过设定各种包含多节点信息的GGroup
(组),自行控制图的条件判断、循环和并发执行逻辑。
本工程使用纯C++11标准库编写,无任何第三方依赖,兼容MacOS
、Linux
、Windows
和Android
系统。支持本地编译和二次开发,并且提供Python
版本:PyCGraph
。编译和安装方法,请参考 CGraph 编译说明
详细功能介绍和用法,请参考 一面之猿网 中的文章内容。相关视频在B站持续更新中,欢迎观看和交流:
- 【B站视频】CGraph 入门篇
- 【B站视频】CGraph 功能篇
- 全面介绍CGraph项目中,所有的名词术语和功能模块
- 结合实际coding过程,详细介绍了每个功能的具体的使用场景、用法、以及解决的问题
- 适合想要全面了解功能和快速上手使用CGraph的童鞋
- 适合对多线程编程感兴趣的童鞋
- 【B站视频】CGraph 应用篇
- 【B站视频】CGraph 分享篇
C++ 版本
#include "CGraph.h" using namespace CGraph; class MyNode1 : public GNode { public: CStatus run() override { printf("[%s], sleep for 1 second ...\n", this->getName().c_str()); CGRAPH_SLEEP_SECOND(1) return CStatus(); } }; class MyNode2 : public GNode { public: CStatus run() override { printf("[%s], sleep for 2 second ...\n", this->getName().c_str()); CGRAPH_SLEEP_SECOND(2) return CStatus(); } }; int main() { /* 创建一个流水线,用于设定和执行流图信息 */ GPipelinePtr pipeline = GPipelineFactory::create(); GElementPtr a, b, c, d = nullptr; /* 注册节点之间的依赖关系 */ pipeline->registerGElement<MyNode1>(&a, {}, "nodeA"); pipeline->registerGElement<MyNode2>(&b, {a}, "nodeB"); pipeline->registerGElement<MyNode1>(&c, {a}, "nodeC"); pipeline->registerGElement<MyNode2>(&d, {b, c}, "nodeD"); /* 执行流图框架 */ pipeline->process(); /* 清空流水线中所有的资源 */ GPipelineFactory::remove(pipeline); return 0; }
CGraph Demo
如上图所示,图结构执行的时候,首先执行a
节点。a
节点执行完毕后,并行执行b
和c
节点。b
和c
节点全部执行完毕后,再执行d
节点。
Python 版本
import time from datetime import datetime from PyCGraph import GNode, GPipeline, CStatus class MyNode1(GNode): def run(self): print("[{0}] {1}, enter MyNode1 run function. Sleep for 1 second ... ".format(datetime.now(), self.getName())) time.sleep(1) return CStatus() class MyNode2(GNode): def run(self): print("[{0}] {1}, enter MyNode2 run function. Sleep for 2 second ... ".format(datetime.now(), self.getName())) time.sleep(2) return CStatus() if __name__ == '__main__': pipeline = GPipeline() a, b, c, d = MyNode1(), MyNode2(), MyNode1(), MyNode2() pipeline.registerGElement(a, set(), "nodeA") pipeline.registerGElement(b, {a}, "nodeB") pipeline.registerGElement(c, {a}, "nodeC") pipeline.registerGElement(d, {b, c}, "nodeD") pipeline.process()
其他版本
- CsCGraph : A CSharp native, CGraph-API-liked DAG project
- JaCGraph : A Java native, CGraph-API-liked DAG project
- GoCGraph : A Go native, CGraph-API-liked DAG project
- CGraph-lite : A one-header-only, CGraph-API-liked DAG project, lite version by C++
- 纯序员给你介绍图化框架的简单实现——执行逻辑
- 纯序员给你介绍图化框架的简单实现——循环逻辑
- 纯序员给你介绍图化框架的简单实现——参数传递
- 纯序员给你介绍图化框架的简单实现——条件判断
- 纯序员给你介绍图化框架的简单实现——面向切面
- 纯序员给你介绍图化框架的简单实现——函数注入
- 纯序员给你介绍图化框架的简单实现——消息机制
- 纯序员给你介绍图化框架的简单实现——事件触发
- 纯序员给你介绍图化框架的简单实现——超时机制
- 纯序员给你介绍图化框架的简单实现——线程池优化(一)
- 纯序员给你介绍图化框架的简单实现——线程池优化(二)
- 纯序员给你介绍图化框架的简单实现——线程池优化(三)
- 纯序员给你介绍图化框架的简单实现——线程池优化(四)
- 纯序员给你介绍图化框架的简单实现——线程池优化(五)
- 纯序员给你介绍图化框架的简单实现——线程池优化(六)
- 纯序员给你介绍图化框架的简单实现——性能优化(一)
- 纯序员给你介绍图化框架的简单实现——性能优化(二)
- 纯序员给你介绍图化框架的简单实现——距离计算
- CGraph 主打歌——《听码农的话》
- 聊聊我写CGraph的这一年
- 从零开始主导一款收录于awesome-cpp的项目,是一种怎样的体验?
- 炸裂!CGraph性能全面超越taskflow之后,作者却说他更想...
- 以图优图:CGraph中计算dag最大并发度思路总结
- 一文带你了解练习时长两年半的CGraph
- CGraph作者想知道,您是否需要一款eDAG调度框架
- 降边增效:CGraph中冗余边剪裁思路总结
- 最新码坛爽文:重生之我在国外写CGraph(python版本)
- GraphANNS : Graph-based Approximate Nearest Neighbor Search Working off CGraph
- CThreadPool : 一个简单好用、功能强大、性能优异、跨平台的C++线程池
- PyCGraph-example : A useful list of how cool to use PyCGraph
- awesome-cpp : A curated list of awesome C++ (or C) frameworks, libraries, resources, and shiny things. Inspired by awesome-... stuff.
- awesome-workflow-engines : A curated list of awesome open source workflow engines
- taskflow : A General-purpose Parallel and Heterogeneous Task Programming System
- torchpipe : Serving Inside Pytorch
- nndeploy : Easy-to-use, high-performance, multi-platform inference deployment framework
- KuiperInfer : 带你从零实现一个高性能的深度学习推理库,支持大模型 llama2 、Unet、Yolov5、Resnet等模型的推理。Implement a high-performance deep learning inference library step by step
- OGraph : A simple way to build a pipeline with Go.
- pybind11 : Seamless operability between C++11 and Python
- 本项目Python接口绑定功能,使用pybind11实现
- 【B站视频】pybind11落地实战——PyCGraph是怎样练成的 | 飞书文档链接
附录-1. 版本信息
[2021年05月04日 - v1.0.0 - Chunel]
- 提供图化执行功能,支持非依赖节点并行计算
[2021年05月09日 - v1.1.0 - Chunel]
- 优化图执行过程中的并发度
[2021年05月18日 - v1.1.1 - Chunel]
- 添加节点
name
和session
信息
[2021年05月23日 - v1.2.0 - Chunel]
- 提供单节点循环执行功能
[2021年05月29日 - v1.3.0 - Chunel]
- 提供
cluster
(簇)和region
(区域)划分和循环执行功能 - 提供
tutorial
内容,包含多种使用样例
[2021年06月14日 - v1.4.0 - Chunel]
- 提供
param
(参数)传递机制 - 提供
group
(组)功能,多节点模块统一继承自group
模块 - 添加对Linux系统的的支持
[2021年06月20日 - v1.4.1 - Chunel]
- 提供
condition
(条件)功能 - 添加对Windows系统的支持
[2021年06月24日 - v1.5.0 - Chunel]
- 提供
pipeline
工厂创建方法 - 更新
tutorial
内容
[2021年07月07日 - v1.5.1 - Chunel]
- 优化线程池功能。实现任务盗取机制
[2021年07月11日 - v1.5.2 - Chunel]
- 优化线程池功能。实现线程数量自动调节机制
[2021年07月31日 - v1.5.3 - Chunel]
- 优化线程池功能。实现任务批量获取功能,优化任务盗取机制
[2021年08月29日 - v1.6.0 - Chunel]
- 提供多
pipeline
功能,优化底层逻辑 - 更新
tutorial
内容
[2021年09月19日 - v1.6.1 - Chunel]
- 提供
Lru
算子、Trie
算子和模板节点功能,优化底层逻辑 - 更新
tutorial
内容
[2021年09月29日 - v1.7.0 - Chunel]
- 提供
aspect
(切面)功能,用于横向扩展node
或group
功能 - 更新
tutorial
内容
[2021年10月07日 - v1.7.1 - Chunel]
- 优化
aspect
(切面)实现逻辑,提供切面参数功能,提供批量添加切面功能 - 更新
tutorial
内容
[2021年11月01日 - v1.8.0 - Chunel]
- 提供
adapter
(适配器)功能,提供singleton
适配器功能 - 优化
pipeline
执行逻辑 - 更新
tutorial
内容
[2021年12月18日 - v1.8.1 - Chunel]
- 优化了返回值
CStatus
信息
[2022年01月02日 - v1.8.2 - Chunel]
- 提供节点执行超时自动退出功能,提供
task group
(任务组)功能 - 提供线程池配置参数设置方法
[2022年01月23日 - v1.8.3 - Chunel]
- 提供
function
适配器,实现函数式编程功能 - 提供线程优先级调度功能,提供线程绑定cpu执行功能
- 更新
tutorial
内容
[2022年01月31日 - v1.8.4 - Chunel]
- 提供
node
(节点)异步执行的功能
[2022年02月03日 - v1.8.5 - Chunel]
- 提供
daemon
(守护)功能,用于定时执行非流图中任务 - 更新
tutorial
内容
[2022年04月03日 - v1.8.6 - Chunel]
- 提供
DistanceCalculator
算子,用于实现任意数据类型、任意距离类型的计算 - 更新
tutorial
内容
[2022年04月05日 - v2.0.0 - Chunel]
- 提供
domain
(领域)功能,提供Ann
领域抽象模型,开始支持个别专业方向 - 提供hold执行机制
- 更新
tutorial
内容
[2022年05月01日 - v2.0.1 - Chunel]
- 优化
pipeline
注册机制,支持init方法自定义顺序执行 - 提供一键编译脚本
[2022年05月29日 - v2.1.0 - Chunel]
- 提供
element
参数写入方法 - 提供针对C++14版本的支持
- 更新
tutorial
内容
[2022年10月03日 - v2.1.1 - Chunel]
- 提供线程池中的任务优先级机制
- 优化
group
执行逻辑
[2022年11月03日 - v2.2.0 - Chunel]
- 提供
message
(消息)功能,主要用于完成不同pipeline
之间的数据传递 - 更新
tutorial
内容
[2022年12月24日 - v2.2.1 - Chunel]
- 提供
TemplateNode
(模板节点)功能,用于优化参数传参方式 - 更新
tutorial
内容
[2022年12月25日 - v2.2.2 - yeshenyong]
- 优化图执行逻辑
[2022年12月30日 - v2.2.3 - Chunel]
- 提供
message
发布订阅功能 - 提供执行引擎切换功能
[2023年01月21日 - v2.3.0 - Chunel]
- 提供
event
(事件)功能 - 提供
CGraph Intro.xmind
文件,通过脑图的方式,介绍了CGraph的整体逻辑
[2023年01月25日 - v2.3.1 - Chunel]
- 提供针对C++11版本的支持。感谢 MirrorYuChen 提供相关解决方案
[2023年02月10日 - v2.3.2 - Chunel]
- 优化调度策略,提供调度参数配置接口
- 提供英文版本readme.md
[2023年02月12日 - v2.3.3 - yeshenyong, Chunel]
- 提供graphviz可视化图展示功能
- 提供参数链路追踪功能
[2023年02月22日 - v2.3.4 - Chunel]
- 优化Windows系统下调度机制
- 优化
param
机制和event
(事件)机制
[2023年03月25日 - v2.4.0 - woodx, Chunel]
- 提供可运行的docker环境,和构建docker环境的dockerfile文件
- 提供
pipeline
调度资源管控机制 - 优化调度性能
[2023年05月05日 - v2.4.1 - Chunel]
- 提供线程绑定执行功能
- 提供
pipeline
最大并发度获取方法。感谢 Hanano-Yuuki 提供相关解决方案 - 提供
pipeline
异步执行功能和执行时退出功能
[2023年06月17日 - v2.4.2 - Chunel]
- 提供
MultiCondition
(多条件)功能 - 提供
pipeline
暂停执行和恢复执行功能
[2023年07月12日 - v2.4.3 - Chunel]
- 优化
CStatus
功能,添加了异常定位信息
[2023年09月05日 - v2.5.0 - Chunel]
- 提供perf功能,用于做
pipeline
的性能分析 - 提供
element
的超时机制 - 提供
some
(部分)功能,优化pipeline
的异步执行方式
[2023年09月15日 - v2.5.1 - Chunel]
- 提供
fence
(栅栏)功能 - 提供
coordinator
(协调)功能
[2023年11月06日 - v2.5.2 - Chunel]
- 优化
message
(消息)功能,可以设定写入阻塞时的处理方式,减少内存copy次数 - 添加
example
相关内容,针对不同行业,提供一些简单实现 - 优化调度性能
[2023年11月15日 - v2.5.3 - Chunel]
- 提供
proto
定义文件 - 添加
mutable
(异变)功能,提供依赖关系注册语法糖
[2024年01月05日 - v2.5.4 - Chunel]
- 提供
test
内容,包含性能和功能方面的测试用例 - 优化
event
(事件)机制,支持异步等待功能
[2024年07月18日 - v2.6.0 - PaPaPig-Melody, Chunel]
- 提供
pipeline
的拓扑执行的方式 - 提供判定
element
之间是否有依赖关系的方法 - 提供bazel编译方式
- 优化perf功能
[2024年09月17日 - v2.6.1 - Chunel]
- 提供
pipeline
的静态执行的方式,提供基于静态执行的微任务机制 - 提供
pipeline
剪裁功能,用于删除element
之间重复的依赖 - 提供
element
删除依赖的方法 - 优化
event
(事件)机制,异步事件可以等待结束 - 发布 CGraph-lite 项目,提供简单DAG构图和参数传递功能。接口完全兼容,可无缝切换至本项目
[2024年11月16日 - v2.6.2 - Chunel]
- 优化参数互斥机制和获取性能
- 修复辅助线程异常等待问题
- 更新
tutorial
内容
[2025年03月16日 - v3.0.0 - Chunel]
- 提供 Python 版本
- 提供
stage
(阶段)功能,用于element
之间同步运行 - 更新
tutorial
内容
[2025年05月04日 - v3.1.0 - Chunel]
- 提供 全量功能 Python 版本
- 提供 Python 和 C++ 混合编程功能
- 提供 Python 打包功能,支持
pip3 install PyCGraph
安装
[2025年06月15日 - v3.1.1 - Chunel]
- 提供 C# 和 Java 版本
- 提供
CODE_OF_CONDUCT.md
文档
[2025年09月06日 - v3.1.2 - Chunel]
- 提供 Go 版本
- 优化
message
功能 - 优化
aspect
功能
[2025年10月06日 - v3.2.0 - Chunel]
- 提供 本地保存和加载 功能
附录-2. 感谢
- 感谢 Doocs 微信公众号 刊登相关介绍文档,欢迎加入 Doocs 开源社区
- 感谢《HelloGithub》期刊介绍和推荐:HelloGithub 第70期
- Thanks to the recommendation from awesome-cpp, we all know, it is the most authoritative recommendation list for cpp project in the world
- Thanks to the recommendation from
Taskflow Group
: awesome-parallel-computing, and we always treat taskflow as a role model - Thanks to the recommendation from awesome-workflow-engines
- 感谢各位开发者 CONTRIBUTORS 为项目做出的贡献
- 感谢所有为
CGraph
项目提出的意见和建议的朋友,在此不一一提及。随时欢迎大家加入,一起共建
附录-3. 联系方式
- 微信: ChunelFeng (欢迎扫描上方二维码,添加作者为好友。请简单备注个人信息^_^)
- 邮箱: chunel@foxmail.com
- 源码: https://github.com/ChunelFeng/CGraph
- 论坛: www.chunel.cn