完成端口Iocp与Epoll的区别

Windows下高并发的高性能服务器一般会采用完成端口IOCP技术,Linux下则会采用Epoll。

最近写enp时发现Iocp和Epoll的一个根本区别是Epoll是返回多个socket中有事件发生的socket,类似select,不过性能更高;Iocp则是在动作完成后返回通知(完成端口中的“完成”就是这个意思)。

两者都能够把socket和一个4字节Key字段绑定在一起,Epoll中是epollevent的data字段,Iocp是Key字段。他们都能在捕获到事件时返回给应用层。看到许多实例是把socket值当作Key字段,估计是实例的缘故,实际产品中,会是一个能找到socket对应session的字段,例如session的下标或session的地址,enp中session是预分配的,key字段就是session的下标。

在Iocp中,连接被客户端关闭、recv完成、send完成、连接完成、accept完成、连接被服务器关闭、超时都会在Get函数中捕获到事件。如何区分具体是哪个事件,是通过返回的Overlapped和Bytes字段配合判断的。在enp中,没有为每个session都分配Overlapped结构,而是所有session共用几个Overlapped。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值