小弟初次做一个服务端程序,发现效率比较低下,比如处理一个SOCKET连接的通信需要100毫秒,而处理十个就要1000毫秒。。。
我是侦听到一个连接请求就使用MFC的CAsyncSocket开一个连接对象,然后响应OnReceive进行处理。请问:我是不是应该开多线程处理,一般象这种服务程序是如何解决这些问题的,能够容纳多少个线程?还有,这样开多线程,一有处理CPU占用老是100%,有没有好的解决方法?
小弟是个菜鸟,希望大侠们多多指教,先行谢过了!
根据你所说的。我猜测你先开始用的是一个TCP连接的Socket。收到一个连接请求之后,我不明白你为什么要“使用MFC的CAsyncSocket开一个连接对象”? ,你新建一个对象,要调用构造函数,并初始化。用的时间当然要长了。
你不知道Socket有accept函数么?
还有,开新线程要谨慎,要看看性能的瓶颈在哪里。如果在套接字,那就多开套接字。如果在处理信息部分,那就可以多处理消息的开线程。
对呀!服务器端就是为每个连接开一个线程来处理的,首先CAsyncSocket本身就是多线程的,OnAccept的时候每收到一个新的连接,就开一个新的线程。
CAsynSocket是单线程的,只是每一个连接添加一个对象而已
线程要你自己写
不过不推荐线程方法。因为无论你线程再多,同时能够执行的线程数取决于你CPU的数量
而且,创建/释放线程资源是很浪费系统的
CAsynSocket隐藏了一个消息处理窗口,OnReceive,OnAccept等都是窗口消息响应函数。
当你创建CAsynSocket对象后,它就有一套自己的消息循环,所以,你可以把它理解为多线程,因为一般情况下,不影响主界面消息循环,除非CAsynSocket对象消息特别多以至于来不及处理,这种情况繁忙的服务器很容易发生。
要想写高效率的服务器,建议用异步I/O,或完成端口。
开那么多线程的话不是叫别人来黑你嘛..........
你的CPU的资源是有限滴