【发布时间】:2013-01-18 18:02:07
【问题描述】:
ZeroMQ 指南有使用 ZeroMQ 进行进程内多线程(进程内传输)的好例子。但是,该示例显示了一个简单的消息有效负载,它是一个字符串。因此,序列化和去序列化的成本很小。
但是,以大型业务领域对象为例。这个域对象可以被序列化为它的 XML 表示。那么,如果与每个线程通信意味着必须在一个线程中对域对象进行序列化,发送到 inproc 工作线程,进行反序列化并根据消息负载采取行动,那么 ZeroMQ 如何在多线程中表现出色。序列化和反序列化的成本不会抵消消息传递的任何性能提升吗?
我了解这种结构的好处,因为将来可以跨 CPU、跨节点、跨网络等进行扩展。但我对整个“使用 ZeroMQ 的多线程”概念感到困惑。
另一种方法是将域对象存储在缓存中,然后将标识传递给工作线程,工作线程将从缓存中获取实际的域对象。这是本意吗?
欢迎任何用例或最佳实践。
【问题讨论】:
-
如果你使用ZMQ进行线程间通信,你可以使用inproc协议,只需序列化你想要传递的消息的指针地址(在堆上)。
标签: multithreading zeromq