Giter VIP home page Giter VIP logo

Comments (6)

myseemylife avatar myseemylife commented on May 28, 2024

另外,异步事件目前被设计成pipeline结束或者destroy前在内部统一等待。是否可以给具体的Event开放waitAsyncResult的接口呢?

from cgraph.

ChunelFeng avatar ChunelFeng commented on May 28, 2024

看了examples和tutorial,但还是不太理解ASYNC EVENT的应用场景。

你好,异步事件,主要是为了方便实现一些埋点逻辑,比如,走到某个特定的判断逻辑,
我需要给 redis 上的一个 key 值做 +1操作

如果用同步的话,需要等 redis的请求返回,会阻塞 后面的逻辑执行,故设计了 异步事件的逻辑

from cgraph.

ChunelFeng avatar ChunelFeng commented on May 28, 2024

异步 event 主要是为了和 同步的event触发方式保持一致,故返回 CStatus状态,表示是否有触发,而没有关注触发执行的结果。
如果给 event 添加了 waitAsyncResult()方法,如果在一个地方被异步触发两次,就可能会有语义上的歧义

如果您需要用异步的逻辑执行,并且想在您指定的位置等待完成的话,
可以考虑使用 node(设定超时) + GFence 的逻辑

from cgraph.

myseemylife avatar myseemylife commented on May 28, 2024

设想如下场景:有一个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.

ChunelFeng avatar ChunelFeng commented on May 28, 2024

哈哈,已经是比较复杂的场景了。

如果是 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.

myseemylife avatar myseemylife commented on May 28, 2024

感谢指导~我试试

from cgraph.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.