iocp注意的几点

好久没写博客了。

Iocp,这次写文件监控,应该是第一次自己写,以前应该只是看吧,单单写注意点吧。

1、CreateIocompletionPort函数,有创建完成端口和关联完成端口两个功能。最后一个参数 NumberOfConcurrentThreads如果是0,那么I/o端口会使用默认值,也就是允许并发执行的线程数量为主机的cpu数量。

2、当使用CreateIocompletionPort函数将句柄与完成端口关联时,系统将这些信息关联到完成端口的设备列表(hDevice, dwComletionKey)中。

3、当一个设备的一个异步I/O完成时,系统会检查设备是否与完成端口相关联,如果设备与一个完成端口相关联,那么系统将该项已完成的I/O请求追加到I/O完成端口的I/O完成队列(dwBytesTransferred,dwConpleteKey, pOverlapped, dwError)的末尾,这个队列是先入先出的

4、唤醒调用了GetQueuedCompletionStatus函数的线程是以后入先出的形式进行的,这样子通过后入先出的算法,系统可以将未调度的线程的内存资源换出磁盘,这意味着让许多线程等待一个完成端口不是什么坏事。

5、当线程调用了sleep等函数导致线程变为不可运行的状态时,I/O完成端口会唤醒另外一个线程。完成端口的目标是使CPU保持在满负荷状态下工作。如果此时不可运行的线程变为可运行了,可运行的线程数量超过cpu的数量。Iocp体系接口允许线程数量短时间超过最大的线程数量。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值