讨论一下重叠模型的缺点

xggpro 2003-12-12 12:58:47
完成端口模型先不讨论,毕竟大多数场合重叠模型已经够用了。
我有一个疑问就是,,,
在重叠模型里,比如我投递一个WSARecv请求,当数据接收完成后,完成例程就会被调用,然后在完成例程里可以对接收到的数据进行处理,处理完后,再投递一个WSARecv请求。。。。这里有一个问题,如果在完成例程里对接收到的数据处理很花费时间的话,比如是2分钟,,,那么在这两分钟内,完成例程都不会返回,那么WSAWaitForMultipleEvents这个函数将不会返回,,,我考虑了一下,将多线程和重叠模型结合,在完成例程里开一个新线程对接受到的数据进行处理,这样就避免了上面的这种情况,,,,大家觉得如何?
...全文
100 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zming 2003-12-13
  • 打赏
  • 举报
回复
不是重叠I/O问题不少,不同的I/O模型,需要适当的作业调度方式。

对于重叠I/O与完成端口的I/O模型,通常采用线程池共享作业对列的方式来处理。

sboom 2003-12-12
  • 打赏
  • 举报
回复
那样还用什么重叠呢?直接用同步recv,开线程接收信息好了。
对数据的不放到回调函数里,回调函数只把信息收取下来。
xggpro 2003-12-12
  • 打赏
  • 举报
回复
当然是异步的了。

另外,如果在多个连接中,当其中某一个连接的触发了完成例程,而处理数据又花了大量时间,完成例程没有及时返回,导致WSAWaitForMultipleEvents长时间阻塞没能返回从而影响别的连接,,个人觉得重叠模型问题不少/
zming 2003-12-12
  • 打赏
  • 举报
回复
对于同一个连接来说,你的通讯模型是异步的还是同步的?

如果是异步的,想法没问题;
如果是同步的,就没有必要了。(有同步做保证)

关于重叠I/O的缺点,请参考《Windows网络编程》,里面有详细的介绍。

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧