在不考虑计算资源的情况下,套接字可以处理的最大并发连接数是多少?

时间:2014-10-15 10:31:46

标签: java multithreading sockets

我试图找出套接字可以处理的最大并发连接数,而不考虑RAM和CPU的计算资源。当然,我谷歌它并检查了SO并发现了一些类似的问题,但我对这些答案都不满意。所以,我会尝试非常具体:

假设以下一段Java代码,它涉及多线程http代理的上下文,其中serverSocket是ServerSocket和ProxyThread的实例,它从Thread扩展:

while (listening) {
  new ProxyThread(serverSocket.accept(),prop).start();
}

问题:我们可以同时处理多少“接受”? (那么,可以并行建立和处理多少个传入连接?)。

我知道一切都受到资源的限制,但我有兴趣知道除了计算资源之外还有其他限制不依赖于此。换句话说,如果存在一个限制,即使添加更多CPU,更多RAM等也无法打破限制。 感谢。

1 个答案:

答案 0 :(得分:0)

软件/硬件限制始终归结为资源限制。我们不能忽视它们,特别是当我们讨论可伸缩性时。

Java为操作系统提供线程和网络连接,操作系统是围绕资源限制设计的。所以你真的要问OS支持多少个连接和/或线程。答案是,这取决于操作系统。

C10K limit是一个众所周知的限制,但实际上我发现系统(取决于应用程序和操作系统架构)最大限度地满足以下关键点:100,1k,5k和10k连接。如果操作系统不轮询非活动连接,并且我们不为每个连接创建一个线程,则可以实现大于10k。