我现在正在选择使用哪种方法来处理新的TCP连接:
- 每个新连接的新流程,
- 处理所有连接的固定数量的进程。
我项目中的最大连接数为1200.一旦建立连接,它就是持久的,很少重新建立。
Linux能否有效地处理在2个六核Xeon CPU主机上并行运行的1200个进程(主机上共有24个线程)?这个门槛在哪里?
我不是在谈论ulimit。我问,“每个新连接的新流程”与“处理所有连接的固定数量的流程”相比,性能会不会更糟吗?
或者1200个进程对Linux来说太过分了,上下文切换会有很大的开销吗?
答案 0 :(得分:2)
Linux可以毫无问题地处理数千个进程,但它会花费大量时间进行上下文切换。您的应用程序是否会在这些条件下响应,实际上取决于它所执行的工作类型。
在今天的硬件上,经典的"一个客户端 - 一个流程"当客户端数量达到几百时,这通常会成为一个瓶颈(这非常近似)。
为了服务数千名客户,我们开发了新技术来克服分叉和转换开销。它通常涉及非阻塞IO,线程或轻量级进程(在用户空间进程内管理)。
由于您的客户端数量高于阻止IO通常可以处理的数量,因此您应该制定一些基准并考虑使用其他方法。
有一篇关于这个问题的经典文章可以帮助您入门:http://www.kegel.com/c10k.html