GitHub-Chinese-Top-Charts
GitHub-Chinese-Top-Charts copied to clipboard
【项目自荐】一款简单好用的DAG调度框架
-
项目地址:https://github.com/ChunelFeng/CGraph
-
类别:C++
-
项目后续更新计划: 提供跨进程通信机制,提供流式处理机制
-
项目描述: 一款基于C++17的跨平台DAG调度框架。用户可以通过自定义节点(node)和组(group),来实现任意类型的图调度功能。
-
推荐理由: 纯中文文档、中文注释项目。无任何第三方依赖,简单好上手。通过流水线编排,实现了依赖节点依次执行、无依赖节点并发执行的逻辑。此外,还提供了循环执行、条件判断、切面编程、自定义分区、函数注入、守护任务、流图自动优化等功能。
代码风格高度统一,便于阅读和Review,提供了10+个适用于各种不同场景的Demo、详细的文档说明和变更记录。普遍适用于算法调度、引擎开发、并发编程、抽象业务通用逻辑等场景。初学者可以通过此项目,学到新C++的一些实用功能、图调度方式、模块开发、模板编程、多线程编程、设计模式和一些通用算法知识。
-
示例代码:
#include "../src/CGraph.h"
using namespace CGraph;
class MyNode1 : public GNode {
public:
CStatus run () override {
CStatus status;
CGRAPH_ECHO("[%s], enter MyNode1 run function. Sleep for 1 second ... ", this->getName().c_str());
CGRAPH_SLEEP_SECOND(1)
return status;
}
};
class MyNode2 : public GNode {
public:
CStatus run () override {
CStatus status;
CGRAPH_ECHO("[%s], enter MyNode2 run function. Sleep for 2 second ... ", this->getName().c_str());
CGRAPH_SLEEP_SECOND(2)
return status;
}
};
void tutorial_simple() {
/* 创建一个流水线,用于设定和执行流图信息 */
GPipelinePtr pipeline = GPipelineFactory::create();
GElementPtr a, b, c, d = nullptr;
/**
* 以下几行代码,设定了一个[b/c]依赖[a],[d]依赖[b/c]的dag流图
*/
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);
}
- 截图:

您好,我最近正在吃BUG中,无法及时回复您的邮件。我将在BUG吃完后,及时给您回复。
我已收到,我会尽快给您回复。
这是来自QQ邮箱的假期自动回复邮件。你好,我最近正在休假中,无法亲自回复你的邮件。我将在假期结束后,尽快给你回复。
谢谢来信
您发给我的邮件已经收到,感谢您的支持!
这。。。