首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络协议 >

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

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

关于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()
}

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

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

热点排行