异步I/O(4)完成端口

  1. 使用设备内核对象使用设备内核对象
  2. 使用事件内核对象 使用事件内核对象
  3. 可提醒I/O 可提醒I/O
  4. I/O完成端口

I/O完成端口是在异步I/O中使用较多的一种异步方式

前面使用的三种异步I/O操作都是使用的串行模型来进行的异步I/O操作
而完成端口才是真正使用的并行模型来进行的异步I/O操作

在使用完成端口时会创建
设备的队列
设备操作的对列
线程池

HANDLE WINAPI CreateIoCompletionPort(
  _In_      HANDLE FileHandle,//文件句柄
  _In_opt_  HANDLE ExistingCompletionPort,//已存在的完成端口
  _In_      ULONG_PTR CompletionKey,//完成端口的Key
  _In_      DWORD NumberOfConcurrentThreads//创建的线程数,当该参数为0表示允许同时相等数目于处理器个数的线程访问该消息队列
);

当创建的线程数大于CPU的物理线程数时,CPU会进行线程上下文的切换,此时会浪费很大的效率

当完成端口创建好之后需要向里面的对列插入请求

BOOL WINAPI PostQueuedCompletionStatus(
  _In_      HANDLE CompletionPort,
  _In_      DWORD dwNumberOfBytesTransferred,
  _In_      ULONG_PTR dwCompletionKey,
  _In_opt_  LPOVERLAPPED lpOverlapped
);
BOOL WINAPI GetQueuedCompletionStatus(
  _In_   HANDLE CompletionPort,
  _Out_  LPDWORD lpNumberOfBytes,
  _Out_  PULONG_PTR lpCompletionKey,
  _Out_  LPOVERLAPPED *lpOverlapped,
  _In_   DWORD dwMilliseconds
);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值