c++ - c++中面向性能的消息回调解决方案

标签 c++ concurrency boost-asio actor zeromq

我正在尝试用 C++ 开发一个 p2p 分布式并发编程解决方案。为了获得更高的吞吐量,我观察到需要“来回”并发和可扩展的网络解决方案,就像 AKKA 提供的参与者模型一样。不幸的是,在 C++ 中没有可用的 actor 模型的可靠解决方案。 libcppa 可用,但只有 Beta 质量。在 zeroMQ 或 Boost.asio 等中是否有任何可扩展和并发的解决方案做同样的事情?我想以编程方式非常快速且以可扩展的方式执行以下操作。

假设我有一个包含 N 个节点的集群,其中包含一组单独的对象。当一个节点需要一个远程对象时,它会发送一个请求并返回一个对象作为响应。目前我按照以下方式进行:

Request req = Network.request(Node x, objectId id);
req.waitforResponse( ); //Implemented through Conc-Hashmap of requests and wait & signal
Object obj = req.response().getObject();
// Do sth with object.

我不想自己实现最后两行代码。我希望它由网络库本身完成。最好的解决方案是,如果我能在某种“ future ”数据结构中获得“req”对象,它只会在调用 getObject() 时阻塞。我认为这是一个非常普遍的问题,应该有一些好的开源解决方案可用于它。如果不是,请提出一些比基于 Concurrent hashmap(C++ Intel 线程)的方法更有效的解决方案。不幸的是,我大量的谷歌搜索并没有带来多少返回。

最佳答案

因为没有人回答。我只是更新我使用的解决方案。我将 MsgConnect 与我的线程池一起使用来处理事件和回调。

关于c++ - c++中面向性能的消息回调解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12023137/

相关文章:

c++ - 使用 Live555 流式传输图像序列

c++ - vector C++ 上的 Memset

java - GUI 未按预期更新/控制流问题

c++ - boost::asio::acceptor 在 win7 上挂起

c++ - "String iterator not dereferncable" boost async_read_some

c++ - 使用 Boost.Asio 时确保有效对象生命周期的最佳方法是什么?

c++ - 将数据传递到字符串时如何保留文件的格式?

c++ - 试图从 Derived* 的 vector 中分配 Base* 的 vector

haskell - 为什么并发 Haskell 是非确定性的,而并行 Haskell 原语(par 和 pseq)是确定性的?

concurrency - 当一个值的所有者可以读取它而另一个线程更改它时,Rust 如何防止数据竞争?