读书人

关于Socket服务端异步收发的性能有关问

发布时间: 2012-03-22 17:43:57 作者: rapoo

关于Socket服务端异步收发的性能问题
最近尝试写一个基于Socket收发的服务端。
一开始采用了同步的收发模式:

监听线程函数()
{
变量处理……

while(true)
{
接收;
}
}

问题不大。后来考虑到性能的优化问题,便改作了异步收发模式:

监听线程函数()
{
变量处理……

while(true)
{
异步接收;//BeginAccept()
}
}

然后CPU使用率一下子飙升至100%。
将异步接收的代码去掉,把监听线程函数改为一个空的死循环,CPU依然100%。
不解,此时循环的负担已经降至最低了。于是又将代码改为如下形式:

监听线程函数()
{
变量处理……

while(true)
{
Thread.sleep(200);
异步接收;
}
}

CPU一下子就降了下来。

因为平时搞网络编程搞的不是很深,所以不明白其中的原因(尽管这可能是小白级的问题),请教各位大侠~~~



[解决办法]
写个死循环 执行以下,看看cpu 就知道了

Thread.sleep(200); 是正确的。

不知道使用的阻塞还是非阻塞? TCP 还是UDP


[解决办法]
你的异步接收时怎么实现的?

while(true)
{
异步接收;//BeginAccept()
}

貌似这么做也只是单线程而已啊

[解决办法]
非阻塞可以 达到 多线程效果. 却不占用多线程的开销.

读书人网 >网络协议

热点推荐