WinSocket的几种异步模式总结

使用Winsock Non-block模式的时候,我们有多少种方法进行异步接收?总共4种!

1. 使用WSAAsyncSelect:

    使用该方法可以指定两种模式,一种是事件通知,另外一种是窗口通知。就是有数据的时候通知上层进行接收。这个是在Windows上面使用最多的。

2. 创建线程使用select模式:

    这个方法的好处是标准接口,基本在系统之间不需要怎么移植,但是实际使用起来还是有点麻烦的,而且在Windows上面是效率最低的一种。

3. 使用完成端口:

    完成端口是效率最高的一种方式,可以省掉很多内存拷贝。因为WIndows的协议栈里面分了很多层,要一层层的拷贝数据,如果使用完成端口就可以省略了。完成端口的原理是,用户传一个指针下去,然后等缓冲里面被写满了数据后通过event通知。这个方法其实实现起来的代码也很精炼哦!98不支持完成端口。

4. 使用Overlap的模式,就是WSARecv最后的OVERLAP参数传一个EVENT进去,等数据填满之后会触发EVENT;可惜的是这个方法内存还是会一层一层拷贝的。效率不算最高,代码写法和完成端口类似。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值