我有一个使用Actors的并发Scala程序的工作原型。我现在正在努力微调不同演员的数量等。
处理的一个阶段需要通过互联网获取新数据。当然,我无法真正做到加快这方面的速度。但是,我想如果我并行启动一堆请求,我可以减少总时间。因此,问题是:
=> Scala或Unix系统(例如max num sockets)上的并发网络是否有限制?如果是这样,我怎么能知道它是什么。
答案 0 :(得分:5)
在Linux中,每个程序可以打开的打开文件描述符的数量是有限制的。这可以使用ulimit -n
看到。 /proc/sys/kernel/file-max
中存在系统范围的限制。
另一个限制是Linux防火墙可以跟踪的连接数。如果您使用的是iptables连接跟踪防火墙,则此值在/proc/sys/net/netfilter/nf_conntrack_max
。
另一个限制当然是TCP / IP本身。您只能与同一个远程主机和端口建立65534连接,因为每个连接都需要(localIP,localPort,remoteIP,remotePort)的唯一组合。
关于通过并发连接加快速度:它不像使用更多连接那么容易。
这取决于瓶颈所在。如果您的本地连接被完全使用,添加更多连接只会减慢速度。如果您连接到同一个远程服务器并且其连接已完全使用,则更多只会降低它的速度。
如果您的本地连接未完全使用且您正在连接到多个远程主机,那么您可以从中获益。
如果您查看Web浏览器,您会看到它们对同一远程服务器的连接数有限制。它们还限制了总共连接的数量。