您的位置:首页 > 其它

完成端口Iocp与Epoll的区别

2006-09-27 19:09 351 查看
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: