首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IOCP:不带字节拷贝的通知

IOCP:不带字节拷贝的通知
EN

Stack Overflow用户
提问于 2012-05-17 20:44:34
回答 1查看 1.1K关注 0票数 0

我有IOCP应用程序,它为每个套接字上下文存储64kb的缓冲区。它使用大量RAM,同时处理数千个套接字。相反,我想切换到每个iocp线程上下文有64kb缓冲区的模型(就像我可以在epoll和kqueue中这样做)。为此,我需要我的完成端口能够在没有字节复制到提供的WSABUF的情况下接收通知,并在通知后简单地调用异步WSARecvFrom(没有提供重叠结构,我使用udp进行测试),直到我收到WSAEWOULDBLOCK。我已经了解到,如果我为具有重叠结构WSARecvFrom调用提供空的WSABUF (buf = NULL,len =0),则可以实现以下技术。但它不起作用:由于缓冲区太小,IOCP永远不会“唤醒”。

有没有其他方法可以让这种情况成为可能?

EN

回答 1

Stack Overflow用户

发布于 2012-05-17 22:58:46

这在TCP上运行得很好,也是避免“锁定页面”限制的好方法,这在早期版本的windows上是个大问题,但现在似乎不是那么大的问题了。对于您的情况,它应该工作得很好。

我有一组IOCP示例代码,它可以是downloaded from here的,这支持“零字节读取”和后续的异步读取(也就是说,它只在与零字节缓冲区的读取完成时发出与缓冲区的重叠读取),我的最新代码支持零字节读取完成后的同步和异步读取。

请注意,如果您正在处理TCP,您提到您正在使用UDP“进行测试”,那么您可以通过对每个连接只发出一个重叠读取来实现“单缓冲区”。一旦读取完成,您就可以在使用相同的缓冲区发出新的重叠读取之前处理它...

如果需要处理数千个并发连接,“零字节读取”仍然很有用,这些连接不经常发送数据,因为它将一次锁定的页数减少到最少。使用它来减少内存使用量将要求您仅在“零字节读取”完成后才为连接分配缓冲区。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10635976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档