IOCP中CompletionKey(完成键)与Overlapped(重叠结构体)的区别
来源:互联网 发布:linux系统 编辑:程序博客网 时间:2024/06/10 04:00
BOOL GetQueuedCompletionStatus(
HANDLE CompletionPort, // 完成端口句柄
LPDWORD lpNumberOfBytes, // 传送数据字节数
PULONG_PTR lpCompletionKey, // 完成键
LPOVERLAPPED * lpOverlapped, // 重叠结构体
DWORD dwMilliseconds // 超时毫秒数
);
GetQueuedCompletionStatus函数中有两个参数lpCompletionKey和lpOverlapped
lpCompletionKey被称为完成键,传递的数据被称为单句柄数据,数据应该是与每个socket句柄对应
lpOverlapped被称为重叠结构体,传递的数据被称为单IO数据,数据应该与每次的操作WSARecv、WSASend等相对应
两个参数都可以用来传递任意数据,包括操作类型、缓冲buffer、套接字等等,网上下载的例子中把buffer放在哪个里面的都有,有的人喜欢全放到一个里面,难免让新接触IOCP的coder们疑惑究竟应该放在哪个里面好一些。
个人认为理论上哪个都是可以的,但最好还是根据上面所说的句柄和数据分开传递。比如一个只需要connect验证服务器是否开启的服务,是不需要buffer的。
通过对IOCP的深入理解,发现buffer不宜放在完成键中。首先猜测下为什么有人放完成键中,可能是对IOCP模型理解不够深入,也可能因为这样做每个socket句柄只需要一个buffer就可以了,不用每个IO都申请buffer。但是在实际应用中,一个socket可能有多个IO请求在队列中,这时每个IO请求都需要独立的buffer存储数据。
注:以上内容纯属个人理解,如有不对的地方请高手指正!
- IOCP中CompletionKey(完成键)与Overlapped(重叠结构体)的区别
- IOCP中CompletionKey(完成键)与Overlapped(重叠结构体)的区别
- 完成端口Iocp与Epoll的区别
- 完成端口与套接字绑定的OVERLAPPED结构释放问题
- overlapped I/O 重叠结构 一
- 完成端口重叠I/O模型的服务器中,如何存储和管理数万个socket句柄—IOCP代码
- 完成端口iocp和重叠端口
- 【网络编程】之十一、重叠IO Overlapped IO 完成例程
- 【网络编程】之十一、重叠IO Overlapped IO 完成例程
- 多种SOKECT通讯模型的理解(select,WSAAsyncSelect,WSAEventSelect,Overlapped I/O 事件通知,Overlapped I/O 完成例程,IOCP)
- 多种SOKECT通讯模型的理解(select,WSAAsyncSelect,WSAEventSelect,Overlapped I/O 事件通知,Overlapped I/O 完成例程,IOCP)
- socket的overlapped(重叠) I\O和其他socket I\O模型的区别
- OVERLAPPED结构与GetOverlappedResult函数
- OVERLAPPED结构与GetOverlappedResult函数
- OVERLAPPED结构与GetOverlappedResult函数
- OVERLAPPED结构与GetOverlappedResult函数
- OVERLAPPED结构与GetOverlappedResult函数
- 完成端口IOCP,重叠,消息选择,消息异步等等....
- JDBC 实现增删改查
- 大型互联网站解决海量数据的常见策略
- Flash player 11新增的Drawing API
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十三(C#开发)-空间数据导出
- Android中的长度单位详解(dp、sp、px、in、pt、mm)
- IOCP中CompletionKey(完成键)与Overlapped(重叠结构体)的区别
- Android之Activity生命周期详细介绍,新手必必必看
- VTCP 10.X
- Python多线程Socket程序例子
- 分辨率不对 startx 启动过程分析
- OpenCV参考手册之Mat类详解(一)
- 压缩感知,信号处理的新方向
- 【Turbo C 2.0系列】1. 系列工具介绍
- K&R C Exercise 1-21 Solution