关于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()
}
貌似这么做也只是单线程而已啊
[解决办法]
非阻塞可以 达到 多线程效果. 却不占用多线程的开销.