IOCP的RIO对事件有什么好处吗?

时间:2015-10-01 18:02:52

标签: sockets winapi

RIO在这里代表Windows8'注册I / O'网络扩展。从查看示例代码看,无论您是将RIONotify与事件还是IO完成端口一起使用,您基本上都会编写相同的循环,并且具有几乎相同的性能特征。循环体是:

RIONotify() [event or IOCP]
Wait [on the event, or using GetQueuedCompletionStatus()]
RIODequeueCompletion()
// Process the dequeued events

基本上,IO完成端口的使用似乎没有提供超过“事件”的附加功能。通知/等待,因为实际的消息队列是通过RIODequeueCompletion完成的。因此,无论您使用事件还是IOCP,都无关紧要。我的问题是,我是否忽略了模型之间任何有趣或重要的区别?

2 个答案:

答案 0 :(得分:3)

RIO是关于向内核注册缓冲区以节省开销和更高效的队列管理。这不是一个根本性的转变。只需a lot less overhead

IOCP不是要提高个别行动的表现。它是关于使用更少的线程和更少的上下文切换。 RIO更进一步。

答案 1 :(得分:3)

如果你正在使用带有IOCP的RIO,你可以通过调用RIODequeueCompletion()来扩展多个线程,然后立即调用RIONotify()以允许更多通知,然后让你的线程处理完成您使用RIODequeueCompletion()检索的。如果有更多可用的完成,则另一个线程将变为活动状态并且可以执行相同的操作。与单线程轮询循环相比,这可能会或可能不会提供更好的性能。

我有一些示例代码here,以及对各种RIO设计和标准'的相对性能的一些想法。 UDP服务器设计here