首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZMQ (jzmq) - ZThread的目的是什么?

ZMQ (jzmq) - ZThread的目的是什么?
EN

Stack Overflow用户
提问于 2018-03-07 08:43:49
回答 1查看 204关注 0票数 1

在我的项目中,我使用jzmq包通过网络进行通信。我使用的是DEALER ROUTER对。我读过DEALERROUTER类型的套接字不是线程安全的。所以我不能在两个不同的线程上从同一个套接字上发送或接收。

我的问题是

1) jzmq包中的ZThread类的用途是什么?

(2)它是否不安全地处理这个线程?

3)如果从父线程及其子ZThread使用该套接字,是否可以从该套接字发送和接收

4) AttachedAdetachedRunnable的区别是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-07 13:46:00

事实#0: ZeroMQ从来都不是线程安全的(拥有零共享禅宗)

尽管最近的一些努力(在2017年末发表在4.2+上,旨在消除这个已知的初始原则),ZeroMQ教育材料在任何可能的情况下都会出现,并解释了为什么在分布式系统设计实践中尝试分享玩具有一个坏习惯。

(第二章)

即使一个人得到了一些API烘焙的承诺,总是首先基准的表现,如果一个人会想要支付损失的性能成本为这种事后分享原则。正如关于ZeroMQ原生API所指出的,基本上没有什么可共享的(除了一个例外,有时可能有意义的全局上下文( ) -instance)。线程可以从这样的全局上下文()-instance中“借用”IO-套接字实例化,但绝不能共享套接字实例,因为结果在ZeroMQ原生API内部和下都无法保证,因此即使承诺“高于”任何更高级别的API,也不会更好。

第3条)不,

根据2 ),永远不要共享套接字,没有理由尝试这样做。如果管理资源(并且线程是资源中的头等公民),最好在{ inproc:// | ipc:// }传输类上创建一个私有的、指向点的PUSH/PULL (甚至是一系列的单纯形管道)(对于出于性能动机的情况,inproc://甚至可以使用另一个“共同隔离的”私有Context(0)-instance,实际上是零IO线程),并且享受适当的分离,对主要丢失的线程安全(如果不这样做)和性能的负面影响最小。

第1+4条)

(CZMQ/3.0.1API文档) zthread -使用系统线程(不推荐) ..。 zthread类包装OS线程创建。它创建看起来像普通OS线程的分离线程,或者共享调用方的MQ上下文的附加线程,并获得一个inproc管道来与父线程进行回话。分离的线程根据需要创建自己的own上下文。注意:对于zactor,这个类是不推荐的。

您可以更好地检查所使用的本地API、绑定/包装器版本和文档之间的版本爬行。

然而,零分享禅宗可能会引领你的步伐(如果选择的语言绑定允许一个人在设计决策中保持自由-阅读原始的设计动机总是有助于理解从原来的性能和安全洞察力)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49147489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档