中文| English Readme

CGraph is a cross-platform D irected A cyclic G raph 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 and so on. Some useful tools and plugins are also provide to improve your project.
Tutorials and contact information are show as follows. Please get in touch with us for free if you need more about this repository.
CGraph中文名為【色丶圖】,是一套無任何第三方依賴的跨平台圖流程執行框架。通過GPipeline (流水線)底層調度,提供了包含依賴元素依次執行、非依賴元素並發執行在eDAG 調度功能。
使用者只需繼承GNode (節點)類,實現子類的run()方法,並根據需要設定依賴關係,即可實現任務的圖化執行或流水線執行。還可以通過設定各種包含多節點信息的GGroup (組),自行控製圖的條件判斷、循環和並發執行邏輯。
項目提供了豐富的Param (參數)類型,用於不同應用場景下的數據互通。此外,還可以通過添加GAspect (切面)的方式,實現以上各種元素功能的橫向擴展;通過引入GAdapter (適配器)對單個節點功能進行加強;或者通過添加GEvent (信號),豐富和優化執行邏輯。

本工程使用純C++11標準庫編寫,無任何第三方依賴。兼容MacOS 、 Linux 、 Windows和Android系統,支持通過CLion 、 VSCode 、 Xcode 、 Visual Studio 、 Code::Blocks 、 Qt Creator等多款IDE進行本地編譯和二次開發,具體編譯方式請參考CGraph 編譯說明
詳細功能介紹和用法,請參考一面之猿網中的文章內容。相關視頻在B站持續更新中,歡迎觀看和交流:
# include " CGraph.h "
class MyNode1 : public CGraph ::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 CGraph ::GNode {
public:
CStatus run () override {
printf ( " [%s], sleep for 2 second ... n " , this -> getName (). c_str ());
CGRAPH_SLEEP_SECOND ( 2 )
return CStatus ();
}
};# include " MyNode.h "
using namespace CGraph ;
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 ;
}
如上圖所示,圖結構執行的時候,首先執行a節點。 a節點執行完畢後,並行執行b和c節點。 b和c節點全部執行完畢後,再執行d節點。
[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模塊[2021.06.20 - v1.4.1 - Chunel]
condition (條件)功能[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適配器,實現函數式編程功能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領域抽像模型,開始支持個別專業方向tutorial內容[2022.05.01 - v2.0.1 - Chunel]
pipeline註冊機制,支持init方法自定義順序執行[2022.05.29 - v2.1.0 - Chunel]
element參數寫入方法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]
[2023.02.10 - v2.3.2 - Chunel]
[2023.02.12 - v2.3.3 - yeshenyong, Chunel]
[2023.02.22 - v2.3.4 - Chunel]
param機制和event (事件)機制[2023.03.25 - v2.4.0 - woodx, Chunel]
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]
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之間是否有依賴關係的方法[2024.09.17 - v2.6.1 - Chunel]
pipeline的靜態執行的方式,提供基於靜態執行的微任務機制pipeline剪裁功能,用於刪除element之間重複的依賴element刪除依賴的方法event (事件)機制,異步事件可以等待結束[2024.11.16 - v2.6.2 - Chunel]
tutorial內容感謝Doocs 微信公眾號刊登相關介紹文檔,歡迎加入Doocs 開源社區
感謝《HelloGithub》期刊介紹和推薦:HelloGithub 第70期


Taskflow Group : awesome-parallel-computing, and we always treat taskflow as a role modelCGraph項目提出的意見和建議的朋友,在此不一一提及。隨時歡迎大家加入,一起共建