相关对象
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=请输入端口 ...
-
完成端口(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的一切,但我会尽我 ...
-
服务器开发基础-Tcp/Ip网络模型—完成端口(Completion Port)模型
本文对于初学网络编程的极为友好,文中所有代码全部基于C语言实现,文中见解仅限于作者对于完成端口的初步认识,由于作者才疏学浅,出现的错误和纰漏,麻烦您一定要指出来,咱们共同进步.谢谢!!! 完成端口(c ...
随机推荐
-
jquery.Callbacks的实现
前言 本人是一个热爱前端的菜鸟,一直喜欢学习js原生,对于jq这种js库,比较喜欢理解他的实现,虽然自己能力有限,水平很低,但是勉勉强强也算是能够懂一点吧,对于jq源码解读系列,博客园里有很多,推荐大 ...
-
wordpress去掉导航栏链接中的category
找到服务器目录下的functions..php文件,在末尾处添加如下内容即可. 路径:/htdocs/wp-content/themes/functions.php 要追加在functions.php ...
-
解决POST数据时因启用Csrf出现的400错误
第一种解决办法是关闭Csrf public function init(){ $this->enableCsrfValidation = false; } 第二种解决办法是在form表单中加入隐 ...
-
兼容所有浏览器的JS动态显示当前日期时间
<script type="text/javascript"> function show_cur_times(){ //获取当前日期 var date_time = ...
-
c# windows编程控件学习-2
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
-
C# 之屏幕找图
引言 最近,由于工作上的某些原因,又要写类似于外挂的程序,又要用到一个屏幕找图功能,很多程序(eg:按键精灵)都提供了类似的功能,其实在这之前,我也查找过很多类似的C#方法,因为之前有一个试过没有用得 ...
-
DBImg: 图片文件-二进制文件的转换
using System; using System.IO; using System.Drawing; //using System.Collections.Generic; //using Sys ...
-
Spring 实例化bean的方式
实例化bean的方式有三种: 1.用构造器来实例化 2.使用静态工厂方法实例化 3.使用实例工厂方法实例化 当采用构造器来创建bean实例时,Spring对class并没有特殊的要求, 我们通常使用的 ...
-
跨域 Iframe 通信解决方案(兼容 IE 系列浏览器。)
实现思路: 1.postMessage(IE8+, Firefox 3.1+, Opera 9+, Safari, and Chrome) 2.利用window.navigator共享信息,使支持IE ...
-
中秋H5,这篇脑洞开的可以!
案例:嫦娥--寻开心出品:凯迪仕 1.内容:这是一支视频类H5案例.Loading完毕进入页面,首屏提示案例最佳观看方式为先锁屏再横屏.点击开始按钮播放视频,视频讲述"葫芦娃"缠着 ...