ZeroMQ和多线程

4
ZeroMQ指南有一个很好的例子,展示了使用ZeroMQ进行进程内多线程(inproc传输)的示例。但是,该示例显示了一个简单的消息负载,即字符串。因此,序列化和反序列化的成本很小。
然而,以大型业务域对象为例。该域对象可以被序列化为其XML表示形式。那么,如果要与每个线程通信,则意味着该域对象必须在一个线程中进行序列化,发送到inproc工作线程,进行反序列化并对消息负载进行操作。序列化和反序列化的成本难道不会抵消消息传递带来的任何性能增益吗?
我理解这种构造的优点,因为它可以在未来跨CPU、跨节点、跨网络等进行扩展。但我对“使用ZeroMQ进行多线程”的概念感到困惑。
另一种方法可以将域对象存储在缓存中,并仅将身份传递给工作线程,由工作线程从缓存中提取实际的域对象。这是预期的吗?
欢迎任何用例或最佳实践。

如果您使用ZMQ在线程之间进行通信,可以使用inproc协议,并仅序列化要传递的消息(堆上的指针地址)。 - gvd
1个回答

2

ØMQ非常适合在进程内外传输数据,但不适用于将数据编组/解组为二进制表示。

序列化和反序列化的成本是否会抵消消息传递的性能优势?

实际上,通过消息传递,您已将同步进程转换为并行进程。关键的好处不在于传输消息的速度,而在于现在可以并行处理工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接