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倒是有些类似。既然是一个读写设备,我们所能要求它的只是在处理读与写上的高效。 

iocp性能分析

iocp性能分析
  • AthlonxpX86
  • AthlonxpX86
  • 2016年01月26日 18:11
  • 1220

Windows IOCP

Windows IOCP IOCP全称I/O Completion Port,中文译为I/O完成端口。IOCP是一个异步I/O的Windows API,它可以高效地将I/O事件通知给应用程序,类似...
  • GeassYan01
  • GeassYan01
  • 2015年06月12日 14:26
  • 1721

Windows高效通信模型之IOCP

今晚复习计网去了...然后思考了一下怎么解决今天下午那份代码,客户端被子线程阻塞的问题。就像之前说的,那份代码是“One-thread-per-client“的模型,对每个是客户端的连接请求,都要临时...
  • sinat_23118323
  • sinat_23118323
  • 2017年05月01日 01:35
  • 881

windows下简单的IOCP模型迭代回声服务器实例

#include #include #include #include #pragma comment(lib,"ws2_32.lib") #define BUF_SIZE 100 #define R...
  • zl908760230
  • zl908760230
  • 2017年04月25日 16:04
  • 476

[摘录]IOCP从创建、初始化、接收和发送过程

IOCP从创建、初始化、接收和发送过程
  • bambuz
  • bambuz
  • 2010年11月21日 08:31
  • 714

IOCP使用小结

很多知识,只有自己亲自实践了才知道坑在哪里。 socket是内核对象句柄,每次对socket执行操作,需要用户对象到内核对象的转换,执行完成返回结果,需要内核对象到用户对象的转换。 IOCP的中文名称...
  • blwinner
  • blwinner
  • 2016年10月21日 16:05
  • 1241

IOCP线程数量

     对于IOCP的线程大部分书上介绍是为CPU数量的两倍,这应该是经验数字,但是我们也不能完全照搬这个数字,比如说,如果我们在线程上处理了大量的数据库操作,线程同步操作,就会使线程处理等待状态,...
  • chaohaijie
  • chaohaijie
  • 2009年12月25日 08:39
  • 2049

Winsock IO模型之IOCP模型

Windows平台上伸缩性最好的一种I/O模型莫过IOCP了,不过设计和实现起来比较复杂一些。针对成千上万个套接字的并发处理,IOCP采用了线程池+队列+重叠结构的内核机制完成任务。需要说明的是IOC...
  • Lostyears
  • Lostyears
  • 2012年05月08日 21:02
  • 19611

IOCP 基本模型 事例

送上事例前先回忆一下IOCP的步骤 1、创建一个完完成端口 2、创建一个线程A 3、A线程循环调用GetQueuedCompletionStatus()函数来得到IO操作结果,这个函数是阻塞函数 4、...
  • machuanfei_c
  • machuanfei_c
  • 2016年01月09日 21:29
  • 908

老早写过的IOCP模型demo代码;

仅供参考下! #ifndef __IOCPMODEL_H #define __IOCPMODEL_H #include #include #pragma comment(lib,...
  • hubaolin
  • hubaolin
  • 2012年12月27日 09:15
  • 1210
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOCP简介
举报原因:
原因补充:

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