多线程c++应用中的插件/模块通信方法

Plugin/module communication method in multi-threaded C++ app

本文关键字:模块 通信 方法 插件 c++ 应用 多线程      更新时间:2023-10-16

我正在设计一个c++应用程序,它由很大程度上独立的插件或模块组成,这些插件或模块不时产生对其他插件有用的结果。例如,分析模块遇到一些有用的数据并将其发送给操作模块。每个模块将在自己的线程中运行;这样,分析模块就可以继续收集数据,而操作模块则可以以最快的速度处理数据。

我正在寻找一个合适的消息传递架构/设计模式。这个stackoverflow线程给出了一些建议,但我不确定一个普通的接口是否能在多线程环境中工作。

我正在考虑有某种基于频道的架构,其中每个模块在频道上广播一些东西,无论哪个模块对它感兴趣-收听。如果在自由许可下有一些现成的库,那就更好了。

我一直在使用ACE(自适应通信环境)进行线程管理,TCP/UDP通信,互斥关系和编程。

ACE是一个高度可移植的平台核心模式调用集合。最重要的是,它是免费的、开源的,目前正在积极开发中。

http://www.cs.wustl.edu/施密特/ACE.html

对于你的应用程序,我建议你特别关注"ACE_Task_Base"类来提供多线程,"ACE_Reactor"类来为你的异步回调架构注册所有的处理程序。

您可能有兴趣看看ZeroMQ库,它也像并发框架一样起作用。使用此库,您的组件将通过向指定的ZeroMQ套接字发送消息来相互通信。有许多套接字类型(TCP、IPC、inproc)和一些模式可用于请求-应答和发布-订阅消息传递。