我在扩展使用 actor 模型和 zeromq 的应用程序时遇到问题。简单地说:我正在尝试创建数千个通过套接字进行通信的线程。类似于使用 Erlang 类型的消息传递所做的事情。我这样做不是出于多核/性能原因,而是因为以这种方式构建它给了我非常干净的代码。
从哲学的角度来看,这听起来好像是 zmq 开发人员想要实现的,例如 http://zeromq.org/whitepapers:multithreading-magic
但是,似乎存在一些实际限制。在 1024 inproc 套接字处,我开始收到“ZMQError:打开的文件过多”错误。TCP 给了我典型的“断言失败:fds.size () <= FD_SETSIZE”崩溃。
为什么 inproc 套接字有这个限制?为了让它工作,我不得不将项目组合在一起以共享一个套接字。有没有更好的办法?
zmq 只是这种工作的错误工具吗?即它仍然是一个网络库而不是一个演员消息传递库?