相关对象

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))的更多相关文章

  1. [转载]理解 I/O Completion Port (IOCP完成端口)

    原文:理解 I/O Completion Port (IOCP完成端口)欢迎阅读此篇IOCP教程.我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你 ...

  2. window下查看TCP端口连接情况

    window下查看TCP端口连接情况:netstat -ano -p tcp|findstr 10001

  3. 工具类 | window批处理杀死指定端口进程

    window批处理杀死指定端口进程,注意保存时使用ansi格式,运行输入端口即可 @echo off setlocal enabledelayedexpansion set /p port=请输入端口 ...

  4. 【C# 线程】IOCP IO完成端口-Windows系统下常见的7种I/O模型

    一.IOCP(I/O Completion Ports)简介        要实现异步通信,必须要用到一个很风骚的I/O数据结构 ,叫重叠结构"Overlapped",Window ...

  5. 完成端口(Completion Port)详解(转)

    手把手叫你玩转网络编程系列之三    完成端口(Completion Port)详解                                                           ...

  6. [转]一个基于完成端口的TCP Server Framework,浅析IOCP

    [转]一个基于完成端口的TCP Server Framework,浅析IOCP http://www.cppblog.com/adapterofcoms/archive/2010/06/26/1187 ...

  7. (转载)完成端口(Completion Port, I/OCP)详解

    http://www.cnblogs.com/lancidie/archive/2011/12/19/2293773.html 手把手叫你玩转网络编程系列之三    完成端口(Completion P ...

  8. 转:完成端口(Completion Port)详解

    手把手叫你玩转网络编程系列之三    完成端口(Completion Port)详解                                                           ...

  9. 理解I/O Completion Port(完成端口)

    欢迎阅读此篇IOCP教程.我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你心中对IOCP的烦恼.OK,但我不能保证你明白IOCP的一切,但我会尽我 ...

随机推荐

  1. MVC编辑状态两个DropDownList联动

    前几天使用jQuery在MVC应用程序中,实现了<jQuery实现两个DropDownList联动(MVC)>http://www.cnblogs.com/insus/p/3414480. ...

  2. C#开发体感游戏 Kinect应用知识

    Kinect首先是一个XBox 360外接体感设备,通过无线方式捕捉动作感知.由PrimeSense提供Range Camera技术,同类产品如任天堂Wii.Play Station Move,必须让 ...

  3. sql server2008中怎样用sql语句创建数据库和数据表

    这是简单用代码实现创建数据库和数据表的sql语句,如下: --调用系统数据库-- use master go /***防止你要创建的数据库同名,先把它删除掉****/ if Exists(select ...

  4. 造完美的go开发环境

    http://www.cnblogs.com/qgymje/p/3912259.html   这篇原来是给公司里使用go开发的交流用的,主要是工具的安装,用markdown写的,发布了内部gitlab ...

  5. MyBatis插入语句返回主键值

    插入语句xml代码: <insert id="insertUser" parameterType="com.spring.mybatis.po.User" ...

  6. C# 分支语句

    选择语句 if,else if是如果的意思,else是另外的意思,if后面跟()括号内为判断条件,如果符合条件则进入if语句执行命令.如果不符合则不进入if语句.else后不用加条件,但是必须与if配 ...

  7. How to Install Hadoop on Ubuntu

    安装教程,https://www.digitalocean.com/community/tutorials/how-to-install-hadoop-on-ubuntu-13-10

  8. javascript的封装实例

    StringBuffer方法的js自定义封装: <!doctype html><html lang="en"> <head> <meta ...

  9. CSS Hack(转)

    做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现.我个人是不太推荐使用hack的,要知道 ...

  10. atitit.mp4 视频文件多媒体格式结构详解

    atitit.mp4 视频文件多媒体格式结构详解 1. 一.基本概念1 2. MP4文件概述2 3. mp4是由一个个“box”组成的,2 4. 典型简化mp43 5. Fragments5 6. r ...