Chinaunix
标题:
如何同时处理大量连接?
[打印本页]
作者:
feasword
时间:
2007-03-20 09:28
标题:
如何同时处理大量连接?
如题,昨天电话面试的时候被问到这个问题
当时有点发蒙,说了几句人家不满意,我就回答不知道了,后来静下来想想。
首先,我觉得因为一般构建服务器都是使用操作系统中提供的listen函数,这确实会带来一些限制。服务器调用listen后,当客户端有请求连接到来时(SYN),TCP接受这个数据包并维护一个未完成队列。当三次握手完成后,将此项从未完成队列移到已完成队列中,此时accept可从已完成对列中取出信息。由于队列长度有所限制,当短时间内有大量请求到来时,完全可能出现队列满服务器无法响应第一个SYN消息的情况,此时会一般会导致客户端重传SYN。我当时是从这个角度考虑的,确实没想到什么有效的方法,除非加大队列长度。
如果是从创建线程或者进程带来并法效率低下的角度考虑,可以预先创建线程池或进程池(线程池效率较高),个人感觉当时面试官期待的可能是这个答案?
记得以前有人介绍过一些大网站的做法,专门用一台机器当作前置服务器处理连接,在此服务器之后放置几台机器专门处理任务,有前置机做负载均衡。这应该是从处理任务比较消耗资源的角度来考虑吧。但是如果需要后面几台机器同步信息的话就十分复杂了。
关于这个问题大家认为该怎么解决?
查了点资料,有人说windows下用complete port,unix/linux下用异步io。不过我印象里好象记得linux没有真正实现异步io。如果有人用过的请多指教。
作者:
fuyic
时间:
2007-03-20 11:00
加大同时可处理请求数?1024改成4096之类,还有就是加强CPU。。。
作者:
5iwww
时间:
2007-03-20 11:09
squid 集群 squid 集群
作者:
ssffzz1
时间:
2007-03-20 11:18
提高硬件,加大带宽,优化服务器配置,负载均衡.
作者:
llzqq
时间:
2007-03-20 18:15
这个也许有帮助:
http://dsd.lbl.gov/TCP-tuning/linux.html
作者:
langue
时间:
2007-03-20 18:43
.
可用 T/TCP (TCP for Transactions)
请见 《TCP/IP 详解》卷三
.
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2