讨论一下重叠模型的缺点

xggpro 2003-12-12 12:58:47
完成端口模型先不讨论,毕竟大多数场合重叠模型已经够用了。
我有一个疑问就是,,,
在重叠模型里,比如我投递一个WSARecv请求,当数据接收完成后,完成例程就会被调用,然后在完成例程里可以对接收到的数据进行处理,处理完后,再投递一个WSARecv请求。。。。这里有一个问题,如果在完成例程里对接收到的数据处理很花费时间的话,比如是2分钟,,,那么在这两分钟内,完成例程都不会返回,那么WSAWaitForMultipleEvents这个函数将不会返回,,,我考虑了一下,将多线程和重叠模型结合,在完成例程里开一个新线程对接受到的数据进行处理,这样就避免了上面的这种情况,,,,大家觉得如何?
...全文
11 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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网络编程》,里面有详细的介绍。
  • 打赏
  • 举报
回复
相关推荐
发帖
网络编程
加入

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2003-12-12 12:58
社区公告
暂无公告