我正在构建一个服务器应用,并研究使用重叠IO来处理套接字。我发现有些人说“永远不要使用hEvent
”,或者“IO完成端口会更快”等等,但是没有人解释为什么不能使用hEvent
,也没有提供任何有关完成端口速度更快的真实数据或数字,以及相差多少。
hEvent
与WaitForMultipleObjects()
结合更适合我的应用程序,因此如果速度差异微不足道,我倾向于使用它,但我不想在没有真实数据告诉我所做的取舍有多大时就进行决策。我已经搜索了很多次,但无法找到任何比较这两种策略的基准测试或文章或其他东西,除了一些StackOverflow答案说“不要使用这个”而没有给出理由。
是否有人可以向我提供一些关于使用hEvent
和完成端口之间实际世界差别的真实信息或数字呢?
WaitForMultipleObjects
等待所有I/O,那么基本上与I/O完成端口相同。您不希望每个I/O操作都带有自己的WaitForSingleObject
,因为这意味着每个挂起的I/O操作都需要自己的线程,这不可扩展。 - Raymond ChenWaitForSingleObject
绝对不会扩展的情况。在这种情况下,我想象WaitForMultipleObjects
扮演类似于epoll
的角色,尽管我意识到存在很大的差异。我也能理解完成端口可能比WaitForMultipleObjects
略有优势,但如果优势很小,我更喜欢采用WaitForMultipleObjects
方法,因为它可以更好地(感知)控制应用程序中的线程。 - ShadauxCatMAXIMUM_WAIT_OBJECTS
就是这样子的?这真是一个非常好的理由不去使用它 - 我实际上还没有开始写代码,只是看了文档,并且认为MAXIMUM_WAIT_OBJECTS
会是...某种合理的东西。谢谢你终于给出一个好理由!(我刚刚明显地表明了我不是主要的Windows开发者。 :) ) - ShadauxCat