语言无关 – zeroMQ背景背后的理由是什么?

zeroMQ (A very useful socket replacement for those who don’t know)左右,我在邮件列表中遇到了这个问题:

07001

Is there a downside to using multiple contexts? I have a class wrapper I’d like to keep as simple as possible. I can either modify it to allow multiple connects, sockets etc under a single context or leave it as is and have clients of the wrapper instantiate it multiple times.

  
  
  我看到的两个缺点.
  
  
  >绑定资源没有好的效果(额外的内存占用,另一个I / O线程等)
  >在不同上下文中创建的套接字不能使用“inproc”传输来相互通信.名称“inproc”有点不正确;这真的是“内信”.
  
  
  CR

回顾我和各种其他源代码,我终于意识到上下文设置代码:

void *context = zmq_init (1); //creates the context 

void *responder = zmq_socket (context, ZMQ_REP); //creates the socket

zmq_bind (responder, "tcp://*:5555"); //and binds it

... //Do whatever you want with the socket ...

zmq_close (responder); //destructors
zmq_term (context);

可以有效地替换为:

void *context = zmq_init(1); //saving the context is optional

responder = zmq_socket(type); //creates the socket
//additional [context] can be provided if desired (multi-context?)

zmq_bind (responder, "tcp://*:5555"); //and binds it

... //Do whatever you want with the socket ...

zmqx_dest(); //destroys the global context, else provide alternative [context]

这就是我用宏做的.它使事情变得更容易,减少1个变量(其中100个).虽然它远离“理想”,因为它需要宏在同一个“功能范围”内,虽然这可以很容易地解决.

虽然我的例子是C,但这与语言无关.

所以这个问题,创造这样的背景有什么意义?

当它实际上是一个缺点允许这样的功能?因为我可以很容易地预见到很多人(只是复制/粘贴/编辑代码),不考虑额外的开销,并且在不需要时创建“大量的上下文”自己的理由]

我在说这个的原因之一是我正在考虑使用zeroMQ,在初学者游戏编程模块中.很大程度上部分是由于它的简单性,以及插槽倾向于为新家伙炒脑细胞的事实.

随机,我实际上证明了谷歌的V8上下文系统的理由(类似的问题;不同的系统):
What is the design rationale behind HandleScope?

这是一个很好的问题.如果您不需要保存全局上下文,为甚么要求应用创建它? libzmq可以在需要时首先设置状态.

然而,0MQ的旧API的问题不在于它强制您使用上下文,因为这些是套接字的天然父类.问题在于,为了创建和跟踪上下文,您几乎没有任何工作价值.似乎所有的成本和没有好处.

如果您查看最近的API,例如CZMQ和0MQ / 3.1你会看到上下文更有用.在CZMQ中,当破坏上下文时,我们会彻底关闭并销毁所有套接字.这真的很有用在0MQ / 3.1中,我们添加了一些上下文配置,例如I / O线程数量等.此外,API与类模型更一致(zmq_ctx_new,zmq_ctx_set / get,zmq_ctx_destroy)(并且更像CZMQ).

翻译自:https://stackoverflow.com/questions/10528659/what-is-the-rationale-behind-zeromq-context

转载注明原文:语言无关 – zeroMQ背景背后的理由是什么?