4

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

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

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

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

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

4

1 回答 1

2

ØMQ 擅长在进程内外移动数据,但不适用于将数据编组到/从二进制表示。

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

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

于 2013-02-12T12:39:47.960 回答