to 王坏人:
贴主: 要想完成几百个连接以上服务器, 必须抛弃线程模型, 使用 EVENT 和IO重叠模型
我这里曾经有过具体测试, 阻塞的多线程模型服务器最多跑到过600多连接。
服务器 : P4. 2.4G 两个 双路XEON 内存 2G
》》》我前天阻塞模式的压力测试,测试啦两个多小时,开啦四个客户端进程,每个进程有4个连接线程,服务器端运行啦 10 个线程的线程池,在两个小时内响应啦 3 百 50 多万次的并发请求服务。服务器在这两个小时内终于没有出现任何问题(写啦两个多月,阻塞到非阻塞,后又从非阻塞从新转成阻塞模式,最后两个星期就只写啦三百多行代码)。
关于性能:
1、阻塞同步模式只需要系统两次请求,而非阻塞异步模式却需要系统三次请求
2、Event 和重叠模式需要进行内核态和用户态的转换,这个是必须的,简单的阻塞模式是可以不要进行这种转换的。
3、完成端口我一直认为它是采用纤程的模式来实现一个线程调度多个纤程,并用纤程与 Socket 请求一一对应的方法响应 Socket 请求,所以看起来好像是一个线程响应啦多个连接一样的,而纤程实际上就是用户态的多线程。另外完成端口也是采用异步模式,也会多一次系统请求。
4、在高负荷的系统中,多一次请求,累计起来系统的资源占有率将会是非常大的(想想 1 千万次的并发请求情况下?)。
5、多线程的轮巡,在用户态模式下,其开销不是大家想象的那么大,当然还要看线程执行代码的优劣行,开销很大是因为它触发啦内核态和用户态的相互转换。