【问题标题】:ZeroMQ and MultithreadingZeroMQ 和多线程
【发布时间】:2013-01-18 18:02:07
【问题描述】:

ZeroMQ 指南有使用 ZeroMQ 进行进程内多线程(进程内传输)的好例子。但是,该示例显示了一个简单的消息有效负载,它是一个字符串。因此,序列化和去序列化的成本很小。

但是,以大型业务领域对象为例。这个域对象可以被序列化为它的 XML 表示。那么,如果与每个线程通信意味着必须在一个线程中对域对象进行序列化,发送到 inproc 工作线程,进行反序列化并根据消息负载采取行动,那么 ZeroMQ 如何在多线程中表现出色。序列化和反序列化的成本不会抵消消息传递的任何性能提升吗?

我了解这种结构的好处,因为将来可以跨 CPU、跨节点、跨网络等进行扩展。但我对整个“使用 ZeroMQ 的多线程”概念感到困惑。

另一种方法是将域对象存储在缓存中,然后将标识传递给工作线程,工作线程将从缓存中获取实际的域对象。这是本意吗?

欢迎任何用例或最佳实践。

【问题讨论】:

  • 如果你使用ZMQ进行线程间通信,你可以使用inproc协议,只需序列化你想要传递的消息的指针地址(在堆上)。

标签: multithreading zeromq


【解决方案1】:

ØMQ 擅长将数据移入和移出进程,但不适用于将数据编组到/从二进制表示中。

序列化和反序列化的成本不会抵消消息传递的任何性能提升吗?

有效地通过消息传递,您已将同步过程转变为并行过程。主要好处不是传输消息的速度,而是您现在可以并行工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-11
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多