多线程c++应用中的插件/模块通信方法
Plugin/module communication method in multi-threaded C++ app
我正在设计一个c++应用程序,它由很大程度上独立的插件或模块组成,这些插件或模块不时产生对其他插件有用的结果。例如,分析模块遇到一些有用的数据并将其发送给操作模块。每个模块将在自己的线程中运行;这样,分析模块就可以继续收集数据,而操作模块则可以以最快的速度处理数据。
我正在寻找一个合适的消息传递架构/设计模式。这个stackoverflow线程给出了一些建议,但我不确定一个普通的接口是否能在多线程环境中工作。
我正在考虑有某种基于频道的架构,其中每个模块在频道上广播一些东西,无论哪个模块对它感兴趣-收听。如果在自由许可下有一些现成的库,那就更好了。
我一直在使用ACE(自适应通信环境)进行线程管理,TCP/UDP通信,互斥关系和编程。
ACE是一个高度可移植的平台核心模式调用集合。最重要的是,它是免费的、开源的,目前正在积极开发中。http://www.cs.wustl.edu/施密特/ACE.html
对于你的应用程序,我建议你特别关注"ACE_Task_Base"类来提供多线程,"ACE_Reactor"类来为你的异步回调架构注册所有的处理程序。
您可能有兴趣看看ZeroMQ库,它也像并发框架一样起作用。使用此库,您的组件将通过向指定的ZeroMQ套接字发送消息来相互通信。有许多套接字类型(TCP、IPC、inproc)和一些模式可用于请求-应答和发布-订阅消息传递。
相关文章:
- 尝试导入pybind-opencv模块时出现libgtk错误
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- 混淆了如何使用IDL与Ethovision进行通信
- 为什么当我解模块化时,这个C++代代码"效率较低"?
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 内联如何影响模块接口中的成员函数
- C++返回 Numpy 数组的 Python 扩展模块
- C++ Boost::asio串行通信与Arduino无法写入
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 如何从线程中的不同模块调用函数?
- 我是否需要包含隐式使用/与 WindowsAPI 通信"Windows.h"?
- 如何使用 soong 命名空间来有条件地编译模块
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 可以测试SPI通信外部模块
- 选择用于模块化开发的相互通信方法
- 如何在JavaScript和本地客户端模块之间进行通信
- 与主执行模块和动态库双向通信
- 不同的C/ c++模块在编译和链接时彼此之间有什么通信?
- 多线程c++应用中的插件/模块通信方法