Window I/O 完成端口 (Windows I/O Completion Port (IOCP))
相关对象

IO EndPoint, 所有支持重叠IO(overlapped IO)的设备,比如文件,Winsock,管道等。
IOCP, IO完成端口内核对象,可以使用API CreateIoCompletionPort 创建。在使用该API创建IOCP的同时可以关联一个IO EndPoint,也可以在创建后再次调用该API关联其他的IO Endpoint。
Thread,Windows 线程。用来响应IO完成通知。通常用来处理接受到的数据等。
一个IOCP可以关联多个IO EndPoint,但一个IO EndPoint应该只关联上一个IOCP。
一个IOCP可以关联多个Thread,但一个Thread只能关联一个IOCP。
对象协作流程

调用API CreateIoCompletionPort 创建IOCP,同时关联IO EndPoint;
创建线程,用来响应IO完成事件。针对一个IOCP可以指定可以并发执行的最大线程数,也就是可以同时处于活动状态的线程数量。但实际创建的线程数可以更多些。这样可以确保当某个活动的线程运行过程中因故挂起而IOCP队列里头还有待处理的通知时还有空闲的线程可以被系统激活;关于实际线程数量的选择,需要根据具体应用的需要确定。一般建议CPUs+1or2. 线程数量增加可以提高响应速度,但是会增加系统开销。
线程一旦创建,可以调用API GetQueuedCompletionStatus 来等待处理某个IOCP队列里的IOCP包。当有多个线程调用该API时,就会形成一个针对那个IOCP的线程等待队列。该队列实际上是后进先出的堆栈。使用后进先出的调度策略可以很大程度上确保调用该API的当前线程被激活。而激活当前线程,避免了线程的上下文的切换,从而提高了系统运行效率。
IO EndPoint完成某个IO操作后,会产生一个IOCP包加入到先进先出的IOCP队列中。随后,系统会激活线程等待堆栈顶端的线程来处理ICOP队列里头的IOCP包;
线程处理完毕,再次调用AP IGetQueuedCompletionStatus 继续等待IOCP队列里的IOCP包。
关于系统线程池和线程调度的更多信息,请参阅Thread Pools 。
关于IO完成端口详细信息,请参阅I/O Completion Ports。
Window I/O 完成端口 (Windows I/O Completion Port (IOCP))的更多相关文章
- [转载]理解 I/O Completion Port (IOCP完成端口)
原文:理解 I/O Completion Port (IOCP完成端口)欢迎阅读此篇IOCP教程.我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你 ...
- window下查看TCP端口连接情况
window下查看TCP端口连接情况:netstat -ano -p tcp|findstr 10001
- 工具类 | window批处理杀死指定端口进程
window批处理杀死指定端口进程,注意保存时使用ansi格式,运行输入端口即可 @echo off setlocal enabledelayedexpansion set /p port=请输入端口 ...
- 【C# 线程】IOCP IO完成端口-Windows系统下常见的7种I/O模型
一.IOCP(I/O Completion Ports)简介 要实现异步通信,必须要用到一个很风骚的I/O数据结构 ,叫重叠结构"Overlapped",Window ...
- 完成端口(Completion Port)详解(转)
手把手叫你玩转网络编程系列之三 完成端口(Completion Port)详解 ...
- [转]一个基于完成端口的TCP Server Framework,浅析IOCP
[转]一个基于完成端口的TCP Server Framework,浅析IOCP http://www.cppblog.com/adapterofcoms/archive/2010/06/26/1187 ...
- (转载)完成端口(Completion Port, I/OCP)详解
http://www.cnblogs.com/lancidie/archive/2011/12/19/2293773.html 手把手叫你玩转网络编程系列之三 完成端口(Completion P ...
- 转:完成端口(Completion Port)详解
手把手叫你玩转网络编程系列之三 完成端口(Completion Port)详解 ...
- 理解I/O Completion Port(完成端口)
欢迎阅读此篇IOCP教程.我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你心中对IOCP的烦恼.OK,但我不能保证你明白IOCP的一切,但我会尽我 ...
随机推荐
- 面向对象的JavaScript(一)命名空间
在小项目中对于JavaScript使用,只要写几个function就行了.但在大型项目中,尤其是在开发追求良好的用户体验的网站中,如SNS,就会用到大量的JavaScrpt,有时JavaScript的 ...
- C#中得到两个数百分比 (转)
//此方法得到的百分比后小数太多,不行double percent=Convert.ToDouble(2)/Convert.ToDouble(34); string result=(percent*1 ...
- C语言中有bool类型吗?
之前一直都没有注意到,最近在用C语言写DSP算法时,偶然间发现我函数中定义的bool类型的变量在VC6.0(我主要用它来检查一下语法错误)中编译居然报错了,说是bool类型没有定义.用了这么久的C和C ...
- sqlserver工作日常使用sql--持续完善中
select STUFF('232',1,1,'')结果为32,从第一个字符开始去掉一个字符,及去掉 select CONCAT('-','asd')结果为-asd,连接两个字符串 select co ...
- socket调用流程的函数及数据结构
如有错误,欢迎指正. 如果需要,可以提供visio原文件. 参考: 1. <追踪Linux TCPIP代码运行--基于2.6内核> 2. Linux Kernel 2.6.26
- mysql zip install
1.Question Description: 1.1 version: mysql-5.7.11-64 1.2 form: zip file 1.3 >mysqld --install (su ...
- Couchbase介绍,更好的Cache系统
在移动互联网时代,我们面对的是更多的客户端,更低的请求延迟,这当然需要对数据做大量的 Cache 以提高读写速度. 术语 节点:指集群里的一台服务器. 现有 Cache 系统的特点 目前业界使用得最多 ...
- $(document).ready()即$()方法和window.onload方法的比较
以浏览器装载文档为例,我们都知道在页面完毕后,浏览器会通过JavaScript为DOM元素添加事件.在常规的JavaScript代码中,通常使用window.onload方法,而在jQuery中,使用 ...
- 每个软件都自己把操作系统的host配置项加到内存中供频繁调用
nginx的转发,http_pass 转发到一个域名passport.ab.cn 那具体是到哪台机器上. 其实可以通过/etc/hosts文件来配置的. 可以理解,这个hosts文件是操作系统级别的, ...
- HTML CSS样式表布局
一.position:fixed 锁定位置(相对于浏览器的位置),例如有些网站的右下角的弹出窗口. 示例: 二.position:absolute 1.外层没有position:absolute(或r ...