IOCP模型接收文件CPU占用率奇高
做了一个传送文件的小程序
用TCP的socket
client端就是用最简单的send函数,每8*1024字节一次,发送到server端
server端本来直接recv接收,这样在传送文件途中,CPU使用率大概有20%
看到IOCP模型性能比较好
于是研究了一下,把server端改成IOCP模型
可是改了以后,传送文件途中CPU占用率一直都几乎到达100%,有时候会突然变小,但又快速提高
郁闷中,难道IOCP模型名不副实?
怀疑是频繁申请内存空间的问题,(因为server端要不停申请per-I/O资源),后来采用重用以后,问题依旧
然后怀疑是写文件的问题,所以把写文件语句屏蔽,也就是只收不写,CPU占用率依旧
那么问题似乎只剩下一个,就是GetQueuedCompletionStatus的问题了
我用的是GetQueuedCompletionStatus(Completion,&dwTrans,&dwKey,
(LPOVERLAPPED *)&lpol,WSA_INFINITE)
等待时间是WSA_INFINITE
而且只要不传文件,CPU就正常,一传文件,就居高不下
所以是不是可以怀疑是这个函数的问题?
弄了两天了,测试了无数遍
实在找不到原因了
请各路高手帮忙分析一下
看还有什么可能的原因啊?