IOCP简介

原创 2012年03月23日 11:45:16

IOCP全称I/O Completion Port,中文译为I/O完成端口。IOCP是一个异步I/O的API,它可以高效地将I/O事件通知给应用程序。与使用select()或是其它异步方法不同的是,一个套接字[socket]与一个完成端口关联了起来,然后就可继续进行正常的Winsock操作了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。然后应用程序可以对核心层进行查询以得到此完成端口。
  这里我要对上面的一些概念略作补充,在解释[完成]两字之前,我想先简单的提一下同步和异步这两个概念,逻辑上来讲做完一件事后再去做另一件事就是同步,而同时一起做两件或两件以上事的话就是异步了。你也可以拿单线程和多线程来作比喻。但是我们一定要将同步和堵塞,异步和非堵塞区分开来,所谓的堵塞函数诸如accept(…),当调用此函数后,此时线程将挂起,直到操作系统来通知它,“HEY兄弟,有人连进来了”,那个挂起的线程将继续进行工作,也就符合”生产者-消费者”模型。堵塞和同步看上去有两分相似,但却是完全不同的概念。大家都知道I/O设备是个相对慢速的设备,不论打印机,调制解调器,甚至硬盘,与CPU相比都是奇慢无比的,坐下来等I/O的完成是一件不甚明智的事情,有时候数据的流动率非常惊人,把数据从你的文件服务器中以Ethernet速度搬走,其速度可能高达每秒一百万字节,如果你尝试从文件服务器中读取100KB,在用户的眼光来看几乎是瞬间完成,但是,要知道,你的线程执行这个命令,已经浪费了10个一百万次CPU周期。所以说,我们一般使用另一个线程来进行I/O。重叠IO[overlapped I/O]是Win32的一项技术,你可以要求操作系统为你传送数据,并且在传送完毕时通知你。这也就是[完成]的含义。这项技术使你的程序在I/O进行过程中仍然能够继续处理事务。事实上,操作系统内部正是以线程来完成overlapped I/O。你可以获得线程所有利益,而不需要付出什么痛苦的代价。
  完成端口中所谓的[端口]并不是我们在TCP/IP中所提到的端口,可以说是完全没有关系。我到现在也没想通一个I/O设备[I/O Device]和端口[IOCP中的Port]有什么关系。估计这个端口也迷惑了不少人。IOCP只不过是用来进行读写操作,和文件I/O倒是有些类似。既然是一个读写设备,我们所能要求它的只是在处理读与写上的高效。 

相关文章推荐

Windows完成端口(IOCP)简介

WINDOWS完成端口编程 1、基本概念 2、WINDOWS完成端口的特点 3、完成端口(Completion Ports )相关数据结构和创建 4、完成端口线程的工作原理 ...

IOCP客户端版本,异步connect

IOCP客户端版本,异步connect,不知道是不是有人像我这样尝试过这种方式。
  • amwfnyq
  • amwfnyq
  • 2014年06月11日 12:41
  • 2242

多线程下的神奇的IOCP

一个人从接到项目到昨天终于完成,用了差不多4个月,其中各种心酸和眼泪。我的项目是通过网络从客户端上采集数据,通讯原则是客户端有数据要上传,如果网络允许就连接服务器,首先客户端发送一个消息判断服务器是不...

iocp和select区别 (学习)

把TCP/IP协议卷1-3 + UNIX网络编程看通, 然后在 486  Pentium MMX , 双核心 , 4核心 的CPU平台下 使用 10M 100M 1000M分别做测试,会得出超出...

Windows IOCP模型与Linux EPOLL模块之比较

IOCP模型与EPOLL模型的比较 一:IOCP和Epoll之间的异同。 异: 1:IOCP是WINDOWS系统下使用。Epoll是Linux系统下使用。...
  • ljmwork
  • ljmwork
  • 2012年08月16日 09:51
  • 5916

实验IOCP多线程是否会导致TCP乱序

由于IOCP是多线程的,所以有这样的疑问:如果WSARecv缓冲的尺寸明显小于一次到达的数据尺寸,线程内出现挂起的情况,那么是否会并发线程处理同一socket的接收数据,进而因线程不同步可能导致后续数...

可伸缩的IO完成端口服务器模型(IOCP)(英文版)

http://www.codeproject.com/Articles/20570/Scalable-Servers-with-IO-Completion-Ports-and-How ...

Windows 异步IO和 完成端口(IOCP)

见过网上好多的完成端口和网络通信的文章,呵呵,这里就简单的说说文件异步IO和完成端口,这里仅仅说说读取操作。下面是一些总结,很少有人提及,认真的看过MSDN文档之后得出的,欢迎指正。 要对文件异...
  • ztz0223
  • ztz0223
  • 2012年07月26日 23:16
  • 4784

FileShare —— 基于 Windows IOCP 无状态高并发Socket I/O 模型

为尊重原作者,首先附上对我进步非常有用的链接 http://blog.csdn.net/piggyxp/article/details/6922277          这一次的小灵感,是因为要...
  • wszdzh
  • wszdzh
  • 2012年11月25日 20:58
  • 982

Windows服务器高并发处理IOCP(完成端口)详细说明

Windows服务器高并发处理IOCP(完成端口)详细说明 ...
  • ryu2003
  • ryu2003
  • 2017年11月07日 10:55
  • 76
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOCP简介
举报原因:
原因补充:

(最多只允许输入30个字)