昨天一个面试题目。
tcp网络开发,服务器端一般的原理是当有一个客户连接上来的时候建立一个线程。
但是当用客户很多的时候,例如10万个同时访问,我的服务器程序应该如何编写。
难道要建立10万个thread??
请求解决方案。
一般而言, 要自己开发一套能同时上几万客户连接的系统是很少的。
如果真的有那么大的连接, 常规的做法是用线程池。池里的线程数量是可以增加的,线程在一定的时间内存在可以循环使用,如果超过时间线程都没有工作就自己自动关闭。
再说一个线程只服务于一个客户端那太浪费系统资源, 线程的能力还是不错的,服务十七八个客户端都没问题。
当然线程池这东西不太好实现。
tcp支持10万用户同时连接吗?SOCKET不是一个到65535的数吗?
完成端口能支持到多少?我做了测试,500个客户端线程,每个线程5次连接发消息,服务器4个线程,还可以接受的速度,p3的机器,局域网内部测试
线程池更好吗?原理应该是一样的吧
select?那样效率应该还不如完成端口的吧
IIS就是线程池来处理的。它处理的事情多着呢, 不只是客户端的连接还有COM ASP script之类的
事。
除了IIS, J2EE我也看过一些吹牛的文章他们也有这方面的问题, 也是采用程序池的方法。
sssxueren(xueren) 说的也是,完成端口也是为了处理这些问题而产生的。 不过就是把控制权交给了操作系统罗, 相信自己还是相信别人?
推荐:“IO完成端口”!!
再说了,“IO完成端口”本来就是线程池的一种具体实现方法而已,只不过是由系统进行管理和支配而已。信不信得过,看你自己了。
我在单位测试过:
P2-350,WIN2KServer,128M,连接4000都比较轻松.