我试图找出套接字可以处理的最大并发连接数,而不考虑RAM和CPU的计算资源。当然,我谷歌它并检查了SO并发现了一些类似的问题,但我对这些答案都不满意。所以,我会尝试非常具体:
假设以下一段Java代码,它涉及多线程http代理的上下文,其中serverSocket是ServerSocket和ProxyThread的实例,它从Thread扩展:
while (listening) {
new ProxyThread(serverSocket.accept(),prop).start();
}
问题:我们可以同时处理多少“接受”? (那么,可以并行建立和处理多少个传入连接?)。
我知道一切都受到资源的限制,但我有兴趣知道除了计算资源之外还有其他限制不依赖于此。换句话说,如果存在一个限制,即使添加更多CPU,更多RAM等也无法打破限制。 感谢。
答案 0 :(得分:0)
软件/硬件限制始终归结为资源限制。我们不能忽视它们,特别是当我们讨论可伸缩性时。
Java为操作系统提供线程和网络连接,操作系统是围绕资源限制设计的。所以你真的要问OS支持多少个连接和/或线程。答案是,这取决于操作系统。
C10K limit是一个众所周知的限制,但实际上我发现系统(取决于应用程序和操作系统架构)最大限度地满足以下关键点:100,1k,5k和10k连接。如果操作系统不轮询非活动连接,并且我们不为每个连接创建一个线程,则可以实现大于10k。