关于ZeroMQ传福音的主要评论是ZeroMQ作者从未提倡过 的 避免任何形式的共享 强> - 零分享。
鉴于您已经实例化了ZeroMQ基础架构,最好使用内部线程 的 PUSH/PULL 强> 超过IO线程 的 inproc:// 强> 运输级并忘记任何棘手的(b-)锁定。
PUSH/PULL
inproc://
一方(注射器)就是这样 的 aPushCHANNEL.send( new_arg ); 强> 和另一个(执行者)只是 aPullCHANNEL.recv() -s根据需要/在需要时,或者可以使用更智能的方法 aPullCHANNEL.poll() - 如果使用轮询测试的零等待形式,则再次测试 if aPullCHANNEL.poll( 0 ){...}else{...}
aPushCHANNEL.send( new_arg );
aPullCHANNEL.recv()
aPullCHANNEL.poll()
if aPullCHANNEL.poll( 0 ){...}else{...}
和你的 分布式计算 架构成为一个完全分解,多代理基于角色的干净和智能,没有任何肮脏的死锁(所以最好忘记 REQ/REP 从开始),没有任何难以追踪/调试的概念缺陷,并且在适用的情况下检测到所有错误,并且本地责任有意义地映射任何此类错误的根本原因,以便进行即时错误处理。
REQ/REP
的 注意: 强> 是的,ZeroMQ自设计以来不需要线程安全,因为没有什么可以共享(零共享)。 API v4.1 +最近的一些努力开始从这个Zen-of-Zero开始衰落,所以人们可能会读到线程安全性的某些方面,但如上所述,并且几乎存在于神话般的Pieter HINTJENS的ZeroMQ的每一页上圣经书 - “ 的 代码已连接,第1卷 强> “ - 最好的分享。
ZeroMQ设计是完全异步的,不需要关心锁定,互斥体操和其他形式的外在引入的元素,否则基于干净和智能的多代理异步信令/消息传递 分布式计算 建筑。你会爱上它,所以继续尝试并阅读这本书。这将是艰难的,但它将为那些将继续并发现ZeroMQ Zen-of-Zero之美的人付出很多。