小弟初次做一个服务端程序,发现效率比较低下,比如处理一个SOCKET连接的通信需要100毫秒,而处理十个就要1000毫秒
我是侦听到一个连接请求就使用MFC的CAsyncSocket开一个连接对象,然后响应OnReceive进行处理。请问:我是不是应该开多线程处理,一般象这种服务程序是如何解决这些问题的,能够容纳多少个线程?还有,这样开多线程,一有处理CPU占用老是100%,有没有好的解决方法?
小弟是个菜鸟,希望大侠们多多指教,先行谢过了!
我是侦听到一个连接请求就使用MFC的CAsyncSocket开一个连接对象,然后响应OnReceive进行处理。请问:我是不是应该开多线程处理,一般象这种服务程序是如何解决这些问题的,能够容纳多少个线程?还有,这样开多线程,一有处理CPU占用老是100%,有没有好的解决方法?
小弟是个菜鸟,希望大侠们多多指教,先行谢过了!
你不知道Socket有accept函数么?
还有,开新线程要谨慎,要看看性能的瓶颈在哪里。如果在套接字,那就多开套接字。如果在处理信息部分,那就可以多处理消息的开线程。
先把消息收下来再说。让后台的工作线程慢慢处理去。
要知道,如果你接受消息慢的话,有可能造成信息的丢失。
希望大家再帮我想想办法!我的想法是肯定是要开多线程,一个连接开一个线程,这样可行吗?
不过不推荐线程方法。因为无论你线程再多,同时能够执行的线程数取决于你CPU的数量而且,创建/释放线程资源是很浪费系统的
当你创建CAsynSocket对象后,它就有一套自己的消息循环,所以,你可以把它理解为多线程,因为一般情况下,不影响主界面消息循环,除非CAsynSocket对象消息特别多以至于来不及处理,这种情况繁忙的服务器很容易发生。 要想写高效率的服务器,建议用异步I/O,或完成端口。
(由于CAsynSocket本身是多线程的,因此对于每个客户,服务器就有一个单独的线程再和它通信,因此服务器可以同时对多个客户进行服务。)__引自 <Visual C++网络高级编程>
现在服务器一般就是一个连接开一个线程吧,还有别的办法吗?我也在做webserver,我也想study一下,不过服务器的例子网上有很多。
大型的webserver如果都开线程这么做,早就死菜了