Comments (6)
另外,异步事件目前被设计成pipeline结束或者destroy前在内部统一等待。是否可以给具体的Event开放waitAsyncResult的接口呢?
from cgraph.
看了examples和tutorial,但还是不太理解ASYNC EVENT的应用场景。
你好,异步事件,主要是为了方便实现一些埋点逻辑,比如,走到某个特定的判断逻辑,
我需要给 redis 上的一个 key 值做 +1操作
如果用同步的话,需要等 redis的请求返回,会阻塞 后面的逻辑执行,故设计了 异步事件的逻辑
from cgraph.
异步 event 主要是为了和 同步的event触发方式保持一致,故返回 CStatus状态,表示是否有触发,而没有关注触发执行的结果。
如果给 event 添加了 waitAsyncResult()方法,如果在一个地方被异步触发两次,就可能会有语义上的歧义
如果您需要用异步的逻辑执行,并且想在您指定的位置等待完成的话,
可以考虑使用 node(设定超时) + GFence 的逻辑
from cgraph.
设想如下场景:有一个ANode,里面是io 操作去获取一段buffer,这个node会repeate N次,node内的io操作限制只能串行。
期望io和buffer的解析计算可以并行,所以设计了一个ASync Event,在每次io完毕后直接notify(“parse_buffer”,GEventType::Async);
这个node执行完毕后,需要在下一个node中等待,并且获取解析结果。
上述ANode描述的过程 也希望可以并行:
ANode --- io--notify, io--notify,...... getResult
ANode --- io--notify, io--notify,...... getResult
ANode --- io--notify, io--notify,...... getResult
初次学习CGraph,对框架代码和设计抽象的理念理解的不好,不知道上述过程怎么处理会更好?
from cgraph.
哈哈,已经是比较复杂的场景了。
如果是 io 和 parser 流程,可以串行的话,建议使用 isHold() 的逻辑,
具体代码参考这里:https://github.com/ChunelFeng/CGraph/blob/main/tutorial/T14-Hold.cpp
如果一定要 io 和 parser的逻辑,形成一个流水线并行的关系的话,
不建议使用 异步event,强烈建议使用CGraph中提供的 message 机制。
思路是将 io 和 parser 拆分成两个node,之间通过 message来进行交互通知和传递参数,
这样,可以完成您 在 io第二次的时候, parser第一次 io 的结果类似的操作
ps:message机制中,支持 �zero copy 的传递方式您的 buffer信息
参考代码:
https://github.com/ChunelFeng/CGraph/blob/main/tutorial/T16-MessageSendRecv.cpp (跨pipeline)
或者:
https://github.com/ChunelFeng/CGraph/blob/main/example/E03-ThirdFlow.cpp (同一pipeline)
from cgraph.
感谢指导~我试试
from cgraph.
Related Issues (20)
- CStruct 的地方,优化一下
- readme 中说一下流水线调度的事情
- 提供 int 的构造函数
- [BUG] GRegion 两层嵌套,卡死问题 HOT 1
- 超时机制导致element 切割两份commit,出现循环依赖 HOT 3
- 这里注意一下 返回类型的设定
- 在linux or mac上,通过 epoll 来实现 定时器的功能
- run 方法结束之后,提供一个 check 的方法
- 异步事件,写入的时候加锁
- 关注一下这里的内容 HOT 1
- 添加类似 server的 功能
- perf 的时候,将最长链路标红 HOT 1
- 抽象出来 state manager 的逻辑
- 【feat】support the compiling way of bazel HOT 2
- 关于CGRAPH_RECV_MPARAM_WITH_TIMEOUT的使用 HOT 2
- GPipelineFactory::remove(pipeline)执行时,报了free(): invalid pointer
- CGraph可以分析C项目,将其拆分成DAG图吗? HOT 1
- GMultiCondition的奇怪用法 HOT 2
- taskflow 对比测例 HOT 1
- 修改内容,待发版
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cgraph.