各位朋友大家好,我是不会写代码的纯序员——Chunel Feng。CGraph从立项到现在,已经有两年半的时间了。回顾这一坤年中,几乎每个假期的日日夜夜 ,从设计、开发、答疑、测试、推广、到社区活动,基本都是亲身参与,亲力亲为。整理起来,感慨颇多,又是一篇很长的文章。。。
我们注意到,很多项目,刚开始加入的人,都是很容易了解思路,并且跟着团队一起迭代升级的。但是,随着功能的不断迭代,后期加入的朋友,很难快速的了解整个项目的全貌和思路。还有,随着人数的增加和功能的不断演进,架构的一致性、可读性和可重用性,又成了一个重大的问题——这可能就是屎山的由来。
为了避免这一问题,在CGraph开发的过程中,我们持续通过架构调整、文章、视频介绍的方式,来缓解这一问题。我们也会在每次大的改动之前,做一些防腐的工作,但总觉得做的还不够多,不够好。无论是代码,还是文字,还是视频,都只会积重难返。
今天,趁着一坤年的日子,我们再次对之前的所有工作,做一个整理和总结,希望可以帮你做到——了解CGraph,看着一篇就够了 的目标。
按照惯例,首先上源码和视频:
功能回顾 |
我们来回顾一下功能吧。刚开始的时候,我们实现了基于图的调度逻辑,支持了包含条件、子图等功能的group逻辑。然后,我们设计了一套全pipeline内部共享的参数传递机制,一直沿用至今。这两块内容,其实就奠定了一个 parallal-flow 框架的基础功能。后期的所有升级和重构,基本上也都是围绕着这两块内容进行的。
接下来,我们集中精力,针对线程池的调度能力,做了很多优化和适配,并且一直持续至今。通过测试,整体调度性能大幅度提高,我们也因此,有机会再各个维度上思考,并且接受了一些大佬的指导,收获颇多。
为了更好的投入使用,我们还引入了类似切面、定时器、事件等功能。帮助大家更好的设计和实现自己的pipeline逻辑。之后,我们就进入了v2.x的时代。。。
之所以做了大版本的升级,主要是因为CGraph从官方层面开始正式支持项目了。支持的第一个项目就是人工智能及大数据领域的研究课题,可以说是起点很高了。也随着这个契机,我们加入了一些适配逻辑,完善了一些功能,但现在回头看,惊叹那个时候还有这么多的不完善,甚至糟糕的设计和瓶颈,也要向第一波吃螃蟹的朋友表示感激之情和歉意。
现在,CGraph支持了很多领域的很多项目,收到的大都是好评和感谢。但我相信,明年这个时候再回看,也会发现当前很多俗手 被一点点改正和优化。为此,我们也会不断的听取意见,持续努力,期待您多多指教。
再后来,我们实现了message机制,在pipeline内部或者跨pipeline,完成了更多维度、更大场景的dag调度逻辑,我愿称之为绝杀。。。我们还优化了执行逻辑,提供了可视化的链路结构图和性能分析图。有个小tips,作为项目发起者的我,却不是CGraph当前真正执行逻辑的作者。在这里,我们感谢来自批里的家人和社区小伙伴的贡献。
近期吧,我们根据用户的反馈的需求,完成了对执行逻辑的异步兼容,实现了超时逻辑和部分其他相关逻辑。简便程度超出我的预期,补充了并行流图中的重要一环。
总结下来,其中有很多功能,都是刚开始的时候觉得不可实现,或者当时认为已经很不错的。但继续往下看看,总会发现还有很多可能性,很多不足。我们小团队整体的意识和视野,也就是在这些过程中,一步一步的开阔和提升。
总结展望 |
一坤年之后,回到刚开始建立CGraph项目的星巴克,回想这些日子发生的事情,遇到的和帮助过我们的人,收到的鼓励、支持、反馈和意见,每次支持用户的答疑和心得。让我觉得这些日子没有白费,在身体力行的完成为社会做点事情的目标。
我们的项目入选了 《awesome-cpp》《HelloGithub 第70期》 等知名榜单,也被多个社区和技术交流群推荐和讨论,支持的项目覆盖研究领域、开源社区、大大小小的IT公司。这些都是对我们付出的肯定。
我们也曾闹出过比较严重的乌龙。我们曾测得,CGraph的性能在各个场景都可以超越taskflow。但回头却发现,无法复现当时的测试结论——至今也不知当时为什么会得出那些数据。也是后来,我们又持续进行了多轮竭尽所能的优化,才在部分指标上,实现反超。虽然我一直认为,压测性能并不能代表太多,但我们一定会在性能优化的方向不断前进。
我们也有我们的问题和局限性,我们并不了解异构计算,并不能很清楚的梳理不同硬件设备、计算资源、操作系统带来的异同。项目虽然是跨平台的,但却不支持gpu等算力资源,也缺少系统级别的针对性的优化。taskflow很多的调度优化策略,我们至今也没能完全搞懂和借鉴。当然,还有很多类似或者相关的项目可以调研,这些都是我们最好的老师。
十一之间假期,有机会和一位超级资深大佬聊了很长时间相关的内容,让我深深感受到,我们对这个领域、这个知识点的了解还是太少,研究还是太浅。深深的感觉到,我们说的很多,但是做的很少。也正是这一幕一幕,时刻提醒我们,要多听多看,不要让思维长期陷入死局,要寻求更多更广的指导和合作。不能自我满足,更不要盲目自嗨。不要为过去一点点小小的成就沾沾自喜,也不要迷失于当前太多看不懂、想不通、猜不透的现状。朝着更高更快更强的目标努力,我们总能一点点的进步,把未知变成已知,把思维编程实现。
讲到这里,我们按照时间顺序 介绍了CGraph大体功能的迭代过程和用途,也回顾了我们在这一过程中,我们取得的成果和现有的不足。接下来,还有很多坤年,我们还可以做更多、更深的事情。也期待您的加入和支持。
最后一句话,是一个不好的消息:明天就要上班了。。。。。。
[2023.10.06 by Chunel]
推荐阅读
- 纯序员给你介绍图化框架的简单实现——执行逻辑
- 纯序员给你介绍图化框架的简单实现——循环逻辑
- 纯序员给你介绍图化框架的简单实现——参数传递
- 纯序员给你介绍图化框架的简单实现——条件判断
- 纯序员给你介绍图化框架的简单实现——面向切面
- 纯序员给你介绍图化框架的简单实现——函数注入
- 纯序员给你介绍图化框架的简单实现——消息机制
- 纯序员给你介绍图化框架的简单实现——事件触发
- 纯序员给你介绍图化框架的简单实现——超时机制
- 纯序员给你介绍图化框架的简单实现——线程池优化(一)
- 纯序员给你介绍图化框架的简单实现——线程池优化(二)
- 纯序员给你介绍图化框架的简单实现——线程池优化(三)
- 纯序员给你介绍图化框架的简单实现——线程池优化(四)
- 纯序员给你介绍图化框架的简单实现——线程池优化(五)
- 纯序员给你介绍图化框架的简单实现——线程池优化(六)
- 纯序员给你介绍图化框架的简单实现——性能优化(一)
- 纯序员给你介绍图化框架的简单实现——距离计算
- CGraph 主打歌——《听码农的话》
- 聊聊我写CGraph的这一年
- 从零开始主导一款收录于awesome-cpp的项目,是一种怎样的体验?
- 炸裂!CGraph性能全面超越taskflow之后,作者却说他更想…
- 以图优图:CGraph中计算dag最大并发度思路总结
- 【B站视频】CGraph 入门篇
- 【B站视频】CGraph 功能篇
- 【B站视频】CGraph 应用篇
个人信息
- 微信: ChunelFeng
- 邮箱: chunel@foxmail.com
- 个人网站:www.chunel.cn
- github地址: https://github.com/ChunelFeng