2

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

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

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

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

zmq 只是这种工作的错误工具吗?即它仍然是一个网络库而不是一个演员消息传递库?

4

1 回答 1

0

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

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

于 2015-01-05T18:20:55.450 回答