【发布时间】: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