【IOCP】 IOCP模型属于一种通讯模型- 较难

http://baike.baidu.com/link?url=e9vXkKd2aHp8VDr1XTURdwQB4K85r28IYjeMwRIyuaXtsrCsXHY1eohiFgsDXRYRlj6xEQoZFzH9dgKwla2n3q

IOCP(I/O Completion Port),常称I/O完成端口。 IOCP模型属于一种通讯模型,适用于(能控制并发执行的)高负载服务器的一个技术。 通俗一点说,就是用于高效处理很多很多的客户端进行数据交换的一个模型。或者可以说,就是能异步I/O操作的模型。

中文名

I/O完成端口

外文名

I/O Completion Port

简    称

IOCP

性    质

一种通讯模型

目录


1基本概念


2IOCP模型的优缺点


3相关API


4详细概念

1基本概念编辑

IOCP全称I/O Completion Port,中文译为I/O完成端口。IOCP是一个异步I/O的API,它可以高效地将I/O事件通知给应用程序。与使用select()或是其它异步方法不同的是,一个套接字[socket]与一个完成端口关联了起来,然后就可继续进行正常的Winsock操作了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。然后应用程序可以对核心层进行查询以得到此完成端口。

2IOCP模型的优缺点编辑

优点:

① 帮助维持重复使用的内存池。(与重叠I/O技术有关)
  ② 去除删除线程创建/终结负担。
  ③ 利于管理,分配线程,控制并发,最小化的线程上下文切换。
  ④ 优化线程调度,提高CPU和内存缓冲的命中率。

缺点:

理解以及编码的复杂度较高。对使用者有一定要求。

需了解以下基本知识:

① 同步与异步

② 阻塞与非阻塞
  ③ 重叠I/O技术
  ④ 多线程
  ⑤ 栈、队列这两种基本的数据结构

3相关API编辑

① 与SOCKET相关
  1、链接套接字动态链接库:int WSAStartup(...);
  2、创建套接字库: SOCKET socket(...);
  3、绑字套接字: int bind(...);
  4、套接字设为监听状态: int listen(...);
  5、接收套接字: SOCKET accept(...);
  6、向指定套接字发送信息:int send(...);
  7、从指定套接字接收信息:int recv(...);[1]

② 与线程相关
  1、创建线程:HANDLE CreateThread(...);

③ 重叠I/O技术相关
  1、向套接字发送数据: int WSASend(...);
  2、向套接字发送数据包: int WSASendTo(...);
  3、从套接字接收数据: int WSARecv(...);
  4、从套接字接收数据包: int WSARecvFrom(...);

④ IOCP相关
  1、创建/关联完成端口: HANDLE WINAPI CreateIoCompletionPort(...);
  2、获取队列完成状态: BOOL WINAPI GetQueuedCompletionStatus(...);
  3、投递一个队列完成状态:BOOL WINAPI PostQueuedCompletionStatus(...);

4详细概念编辑

这里我要对上面的一些概念略作补充,在解释[完成]两字之前,我想先简单的提一下同步和异步这两个概念,逻辑上来讲做完一件事后再去做另一件事就是同步,而同时一起做两件或两件以上事的话就是异步了。你也可以拿单线程和多线程来作比喻。但是我们一定要将同步和堵塞,异步和非堵塞区分开来,所谓的堵塞函数诸如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中所提到的端口,可以说是完全没有关系。IOCP只不过是用来进行读写操作,和文件I/O倒是有些类似。既然是一个读写设备,我们所能要求它的只是在处理读与写上的高效。

时间: 2024-08-05 14:03:43

【IOCP】 IOCP模型属于一种通讯模型- 较难的相关文章

【I/O模型】几种IO模型浅析(一)

基本概念的学习: 同步&&异步 同步:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行: 异步:如果有多个任务或者事件发生,这些事件可以并发地执行,一个事件或者任务的执行不会导致整个流程的暂时等待. 这就是同步和异步.举个简单的例子,假如有一个任务包括两个子任务A和B,对于同步来说,当A在执行的过程中,B只有等待,直至A执行完毕,B才能执行:而对于异步就是A和B可以并发地执行,B不必等待A执行完毕之后再

Linux五种IO模型(同步 阻塞概念)

Linux五种IO模型 同步和异步 这两个概念与消息的通知机制有关. 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.比如,调用readfrom系统调用时,必须等待IO操作完成才返回. 异步 异步的概念和同步相对.当一个异步过程调用发出后,调用者不能立刻得到结果.实际处理这个调用的部件在完成后,通过状态.通知和回调来通知调用者.比如:调用aio_read系统调用时,不必等IO操作完成就直接返回,调用结果通过信号来通知调用者. 阻塞与非阻塞 阻塞与非阻塞与等待消息通知

7.3 5种IO模型与IO复用

5种IO模型分别如下: 1.阻塞IO模型 当上层应用app1调用recv系统调用时,如果对等方没有发送数据(缓冲区没有数据),上层app1将阻塞(默认行为,被linux内核阻塞). 当对等方发送了数据,linux内核recv端缓冲区有数据后,内核会把数据copy给用户空间.然后上层应用app1解除阻塞,执行下一步操作. 2.非阻塞IO模型 上层应用程序app2将套接字设置成非阻塞模式. 上层应用程序app2轮询调用recv函数,接收数据,若缓冲区没有数据,上层程序app2不会阻塞,recv返回值

二级指针的三种内存模型

第一种内存模型: /* Module: 二级指针第一种内存模型.cpp Notices: Copyright (c) 2017 Landy Tan */ #include <iostream> using namespace std; ///////////////////////////////////////////////// #define SIZE(a) sizeof(a) / sizeof(a[0]) int SortArray(char **pArray, int nLen);

Linux下的五种IO模型

5种IO模型 Linux下五种IO模型 (1)阻塞I/O:什么都不干,导致应用程序阻塞,等待数据准备好,如果数据没有准备好,一直阻塞,等数据准备好了从内核拷贝到用户空间 (2)非阻塞I/O:把一个套接字接口设置为非阻塞,告诉内核,当所请求的IO无法完成时,不要将进程睡眠,而是返回一个错误,这样IO操作函数会不断地测试数据是否准备好,如果没有准备好 ,继续测试,直到准备好为止 (3)I/O复用(select epoll):select或epoll会使进程阻塞,但是和阻塞IO不同的是,这两个函数可以

CSS:3种基本的布局模型、层模型的三种形式

CSS包含3种基本的布局模型: 用英文概括为:Flow.Layer 和 Float.在网页中,元素有三种布局模型:1.流动模型(Flow)2.浮动模型 (Float)3.层模型(Layer) 流动布局模型具有2个比较典型的特征: 第一点,块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布,因为在默认状态下,块状元素的宽度都为100%.实际上,块状元素都会以行的形式占据位置.如右侧代码编辑器中三个块状元素标签(div,h1,p)宽度显示为100%. 第二点,在流动模型下,内联元素都会在所处的

实现按行读取文件,把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出。

/* 2 编写一个业务函数,实现按行读取文件.把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出. 函数原型有两个,任意选择其一 要求1:请自己任意选择一个接口(函数),并实现功能:70分 要求2:编写测试用例.30分 要求3:自己编写内存释放函数 */ /********************************************************************** * 版权所有 (C)2015, Wu Yingqiang. * * 文件名称:ReadFi

推荐系统的几种常见模型概述

某个选修课的论文,这里贴过来,之所以贴过来,是因为我认为自己写的确实非常有意义,网上对这个东西确实没有很系统的中文介绍,我自己也是看了许多论文自己也动手做了很多很多实践才领悟的. 这个只是概论,以后有时间再加上具体的模型.算法. ----------------------------------------------------------------------------- 总的来说,推荐系统的目标可以分为预测评分和物品推荐两种,目前对前者的研究也更多,因为前者更适合建复杂的模型,所以这

CSS3 常用属性(三)-- 用户界面、文字、两种盒模型

用户界面--column 关于用户界面,我们先了解一下在块元素中写文字时,浏览器中的呈现情况,这个其实很明显,所有的文本内容会在块元素内从左到右一个个字排列,排满后,从上到下一排排渲染--然而,有些时候,页面需求的呈现方式是,类似于报纸似得,将一段文本内容,分成多列布局显示. 用户界面使用的示例如下: .font{ width:300px; height:300px; border:1px solid #000; margin:0px auto; column-count:3; /* 定义数量