首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

IOCP 异步发送数据有关问题

2012-04-14 
IOCP 异步发送数据问题我在做服务器的处理命令的压力测试时:测试方式为乒乓测试。发现一个问题,IOCP进行异

IOCP 异步发送数据问题
我在做服务器的处理命令的压力测试时:
测试方式为乒乓测试。
发现一个问题,IOCP进行异步发送的时候,WSASend成功完了之后,会产生IOWriteCompleted命令,send的内存在改IOWriteCompleted命令释放。
这时发现send的命令远程端正常收到又发送一个命令过来,但是我本机服务器有的时候收到IOWriteCompleted命令比较慢。导致内存不能够及时释放。
这样内存狂飙。程度挂掉。

我的疑问就在这,为什么命令内容远程端都收到了,而我的IOWriteCompleted命令还没有在队列里面产生呢?什么原因造成,是我的线程开的不合理么。一个监听线程,三个I/O工作线程,20个业务处理线程。
命令是通过队列做桥梁,从工作线程到业务处理线程中的。

线上服务器还没有跑那么大的负载,所以只在测试中发现该问题。

欢迎知道人士热烈讨论。


[解决办法]
这么多线程,轮询切换也得不少时间了。你还得控制下投递的IO数量
[解决办法]
这是肯定的。

首先,你要这么设想:拿什么保证“完成包”在远程端实际获得数据之前让你得到呢? 没有任何机制承诺做到这一点。 那么,与你这种预设相反的情形就一定会出现。

错误就在于你对系统的这种没有根据的假设上。

而且,服务器在性能上一定是有所限制的,不可能是无限制的,通过限制客户,来保证内存使用不至于崩溃。
[解决办法]
http://blog.csdn.net/kevin_qing/article/details/7363714
[解决办法]
典型的io效率>逻辑效率
[解决办法]
按道理应该不会如此,send之后,iocp的完成行为触发是实时的。你应该检查你自己的代码,看看是不是某个条件或者判断影响了内存的释放。

热点排行