【问题标题】:ZeroMQ and actor modelZeroMQ 和 Actor 模型
【发布时间】:2015-01-04 01:27:43
【问题描述】:

我在扩展使用 Actor 模型和 zeromq 的应用程序时遇到问题。简单地说:我正在尝试创建数千个通过套接字进行通信的线程。类似于使用 Erlang 类型的消息传递所做的事情。我这样做不是出于多核/性能原因,而是因为以这种方式构建它会给我非常干净的代码。

从哲学的角度来看,这听起来好像是 zmq 开发人员想要实现的目标,例如 http://zeromq.org/whitepapers:multithreading-magic

但是,似乎存在一些实际限制。在 1024 inproc 套接字处,我开始收到“ZMQError:打开的文件过多”错误。 TCP 给了我典型的“断言失败:fds.size ()

为什么 inproc 套接字有这个限制? 为了让它工作,我不得不将项目组合在一起以共享一个套接字。有没有更好的办法?

zmq 是不是适合这种工作的工具?也就是说,它更像是一个网络库而不是一个演员消息传递库?

【问题讨论】:

  • 尝试通过 ulimit 增加 fds 限制的数量
  • inproc 限制来自此资源描述符表的操作系统/内核大小。 ZeroMQ 是一个很棒的框架,在基于actor的系统中非常有价值。调整总规模/延迟/性能后,您将需要更深入地研究内核调整和 ZMQ-IO 线程内部结构
  • 不幸的是,它必须在 Windows 上运行:/ 希望我可以更改限制。我真的很喜欢 ZeroMQ,尤其是它允许我将复杂的应用程序行为分成不共享状态的组件的方式,所以这些限制有点烦人。

标签: zeromq pyzmq akka-zeromq


【解决方案1】:

ZMQ 使用文件描述符作为 inproc 连接的“资源单元”。操作系统设置的文件描述符有一个限制,您应该可以修改它(通过快速谷歌搜索找到 Windows 的几个潜在途径),但我不知道性能影响可能是什么。

看起来这与使用 C 代码的 ZMQ 库有关,该库在打开新文件的系统之间是可移植的,而不是不受同样限制的 Windows 本机代码。

【讨论】:

    猜你喜欢
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2016-01-13
    • 1970-01-01
    相关资源
    最近更新 更多