完成端口Iocp与Epoll的区别
2006-09-27 19:09
405 查看
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。
最近写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。
相关文章推荐
- 统一完成端口Iocp和Epoll
- IOCP中CompletionKey(完成键)与Overlapped(重叠结构体)的区别
- Windows完成端口与Linux epoll技术简介
- 完成端口(IOCP)实现高性能网络服务器(源码 C#)
- 【转载】Windows完成端口与Linux epoll技术简介
- Windows完成端口与Linux epoll技术简介
- Delphi中完成端口(IOCP)的简单分析
- Windows完成端口与Linux epoll技术简介
- DELPHI中完成端口(IOCP)的简单分析(2)
- IOCP 完成端口 是性能最好的一种I/O模型
- DELPHI中完成端口(IOCP)的简单分析(3)
- 完成端口(IOCP)--实例
- DELPHI中完成端口(IOCP)的简单分析(3)
- 完成端口(Iocp)。
- 【windows核心编程】IO完成端口(IOCP)复制文件小例
- Windows完成端口与Linux epoll技术简介
- 完成端口(IOCP)学习小结
- DELPHI中完成端口(IOCP)的简单分析(4) 推荐
- Windows下完成端口移植Linux下的epoll(续)
- Windows完成端口与Linux epoll技术简介