iocp基础

简介: iocp基础

在看boost.asio源码时,看针对window平台的win_iocp_io_service中使用到iocp

接口

HANDLEWINAPICreateIoCompletionPort(
_In_HANDLEFileHandle,
_In_opt_HANDLEExistingCompletionPort,
_In_ULONG_PTRCompletionKey,
_In_DWORDNumberOfConcurrentThreads);

CreateIoCompletionPort创建输入/输出 (I/O) 完成端口并将其与指定的文件句柄相关联,或创建尚未与文件句柄关联的 I/O 完成端口,以便稍后关联

FileHandle:打开的文件句柄或 INVALID_HANDLE_VALUE,INVALID_HANDLE_VALUE表示该函数将创建 I/O 完成端口

ExistingCompletionPort :现有 I/O 完成端口或 NULL 的句柄,如果此参数指定现有的 I/O 完成端口,则函数将其与 FileHandle 参数指定的句柄相关联,如果此参数为 NULL,则该函数将创建新的 I/O 完成端口

CompletionKey:指定文件句柄的每个 I/O 完成数据包中包含的每句柄用户定义完成密钥,用来来帮助应用程序跟踪已完成的 I/O 操作

NumberOfConcurrentThreads:操作系统允许并发处理 I/O 完成端口的 I/O 完成数据包的最大线程数

BOOLWINAPIPostQueuedCompletionStatus(
_In_HANDLECompletionPort,
_In_DWORDdwNumberOfBytesTransferred,
_In_ULONG_PTRdwCompletionKey,
_In_opt_LPOVERLAPPEDlpOverlapped);

CompletionPort :I/O 完成数据包要发布到的 I/O 完成端口的句柄

dwNumberOfBytesTransferred:要通过 GetQueuedCompletionStatus 函数的 lpNumberOfBytesTransferred 参数返回的值

dwCompletionKey:要通过 GetQueuedCompletionStatus 函数的 lpCompletionKey 参数返回的值

lpOverlapped:要通过 GetQueuedCompletionStatus 函数的 lpOverlapped 参数返回的值

BOOLGetQueuedCompletionStatus(
  [in]  HANDLECompletionPort,
LPDWORDlpNumberOfBytesTransferred,
  [out] PULONG_PTRlpCompletionKey,
  [out] LPOVERLAPPED*lpOverlapped,
  [in]  DWORDdwMilliseconds);

尝试从指定的 I/O 完成端口取消对 I/O 完成数据包的排队。 如果没有完成数据包排队,函数将等待与完成端口关联的挂起 I/O 操作完成

CompletionPort:完成端口的句柄

lpNumberOfBytesTransferred:指向变量的指针,该变量接收在完成的 I/O 操作中传输的字节数

lpCompletionKey:指向变量的指针,该变量接收与 I/O 操作已完成的文件句柄关联的完成键值。 完成键是在对 CreateIoCompletionPort 的调用中指定的每个文件密钥

lpOverlapped:指向变量的指针,该变量接收在启动完成 I/O 操作时指定的 OVERLAPPED 结构的地址

dwMilliseconds:调用方愿意等待完成数据包出现在完成端口上的毫秒数。 如果完成数据包未在指定时间内显示,则该函数超时,返回 FALSE,并将 *lpOverlapped 设置为 NULL

目录
相关文章
IOCP基本概念
IOCP基本概念
115 0
|
Java Windows 容器
IOCP详解
IOCP(I/O Completion Port,I/O完成端口)是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。在处理多个并发的异步I/O请求时,以往的模型都是在接收请求是创建一个线程来应答请求。这样就有很多的线程并行地运行在系统中。而这些线程都是可运行的,Windows内核花费大量的时间在进行线程的上下文切换,并没有多少时间花在线程运行上。再加上创建新线程的开销比较大,所以造成了效率的低下。
245 0
IOCP详解
|
存储 Java API
[转载]IOCP模型的总结
原文:IOCP模型的总结IOCP(I/O Completion Port,I/O完成端口)是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。在处理多个并发的异步I/O请求时,以往的模型都是在接收请求是创建一个线程来应答请求。
1010 0
|
前端开发 算法 C++
IOCP编程小结(中)
上一篇主要谈了一些基本理念,本篇将谈谈我个人总结的一些IOCP编程技巧。   网络游戏前端服务器的需求和设计   首先介绍一下这个服务器的技术背景。在分布式网络游戏服务器中,前端连接服务器是一种很常见的设计。
1080 0
|
监控 测试技术 C#
C#高性能大容量SOCKET并发(一):IOCP完成端口例子介绍
原文:C#高性能大容量SOCKET并发(一):IOCP完成端口例子介绍 例子主要包括SocketAsyncEventArgs通讯封装、服务端实现日志查看、SCOKET列表、上传、下载、远程文件流、吞吐量协议,用于测试SocketAsyncEventArgs的性能和压力,最大连接数支持65535个长连接,最高命令交互速度达到250MB/S(使用的是127.0.0.1的方式,相当于千兆网卡1Gb=125MB/S两倍的吞吐量)。
3168 0