1.基本概念

1.1同步和异步

  同步和异步关注的是消息通信机制

1.1.1同步

  所谓同步,就是在发出一个调用时,在没有得到结果之前,调用就不返回,一直在等,但是一旦调用返回,就能得到返回值。

1.1.2异步

  异步与同步相反,调用在发出之后,这个调用就直接返回了,调用者不能立刻得到结果,而是在调用彻底完成后,通过状态通知回调来通知调用者

1.1.3举例

  你打电话问书店老板有没有《计算机网络》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。而异步通信机制,书店老板直接告诉你我查一下查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。

1.2阻塞与非阻塞

  阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态

1.2.1阻塞

  阻塞调用是指调用结果返回之前,当前线程会被挂起(即线程暂停运行),调用线程只有在得到结果之后才会返回;对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已

1.2.2非阻塞

  非阻塞调用指在不能立刻得到结果之前,该调用不会挂起当前线程

1.2.3举例

  还是上面的例子,你打电话问书店老板有没有《分布式系统》这本书,如果是阻塞式调用,你会一直把自己“挂起”,直到得到这本书有没有的结果,如果是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去玩了, 当然你也要偶尔过几分钟检查一下老板有没有返回结果。在这里阻塞与非阻塞与是否同步异步无关,跟老板通过什么方式回答你结果无关

1.3一个输入操作(input)的两个阶段

1)等待数据准备好

2)内核向进程复制数据

2.阻塞式I/O模型

1)简介:进程会一直阻塞,直到数据被拷贝到进程的缓冲区

2)进程在从调用recvfrom开始到它返回的整段时间内是被阻塞的。recvfrom成功返回后,进程开始处理数据

3.非阻塞式I/O模型

1)简介:非阻塞IO通过进程不断地调用IO函数,每次调用IO函数若没有数据可返回,则内核转而立即返回一个错误,直至数据准备好,此时将数据拷贝到进程的缓冲区

2)前三次调用recvfrom时没有数据可返回,因此内核每次都立即返回一个EWOULDBLOCK错误;第四次调用recvfrom时已有数据报准备好,它被拷贝到应用进程缓冲区,recvfrom于是成功返回,接着处理数据

3)不断调用IO函数的过程是非阻塞的,数据拷贝的过程是阻塞的

4)进程对一个非阻塞描述符循环调用IO函数时,称之为轮询;轮询往往耗费大量CPU时间

4.I/O复用模型

1)简介:I/O复用会调用select、poll、epoll函数,这三个函数也会使进程阻塞,但是和阻塞I/O所不同的的,这三个函数可以可以同时侦听多个套接口,当有某个套接口可读时,才真正调用recvfrom

2)使用I/O复用的优势在于可以同时等待多个套接口(在多线程中使用阻塞I/O模型与I/O复用模型类似,此时,I/O多路复用的最大优势是系统开销小)

适用场景

1)当一个客户同时处理多个套接字时,而这种情况是可能的,但很少出现

2)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用

3)如果一个服务器要处理多个服务或多个协议,如:即要处理TCP,又要处理UDP,一般要使用I/O复用

5.信号驱动式I/O模型

1)简介:让内核在数据准备就绪时发送SIGIO信号通知进程

2)通过sigaction安装一个信号处理函数,当数据准备好时,内核就为该进程产生一个SIGIO信号,随后进程将在信号处理函数中调用recvfrom处理数据

3)这种模型的优势在于等待数据期间,进程不被阻塞

5.异步I/O模型

1)简介:内核启动某个操作,内核在数据拷贝到进程缓冲区完成后,再通知进程

2)异步I/O模型与信号驱动式I/O模型的主要区别:信号驱动I/O是由内核通知进程何时启动一个I/O操作,而异步I/O模型是由内核通知进程I/O操作已经完成了

6.同步I/O模型和异步I/O模型

POSIX标准定义

1)同步I/O模型:I/O操作将导致进程阻塞的模型,就叫同步I/O模型

2)异步I/O模型:I/O操作不导致进程阻塞的模型,就叫异步I/O模型

3)根据上述定义,前4种模型——阻塞I/O模型、非阻塞I/O模型、I/O复用模型和信号驱动I/O模型都是同步I/O模型,因为其中真正的I/O操作(recvfrom)都将阻塞进程;只有异步I/O模型与POSIX定义的异步I/O相匹配

linux五种I/O模型的更多相关文章

  1. Linux五种I/O模型性能分析

    转载自:http://blog.csdn.net/jay900323/article/details/18141217/ socket阻塞与非阻塞,同步与异步 作者:huangguisu 1. 概念理 ...

  2. Linux五种IO模型性能分析

    1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:       所谓同步,就是在发出一个功能调用时, ...

  3. [转载] Linux五种IO模型

      转载:http://blog.csdn.net/jay900323/article/details/18141217     Linux五种IO模型性能分析   目录(?)[-] 概念理解 Lin ...

  4. 网络通信 --> Linux 五种IO模型

    Linux 五种IO模型 聊聊Linux 五种IO模型

  5. []转帖] 浅谈Linux下的五种I/O模型

    浅谈Linux下的五种I/O模型 https://www.cnblogs.com/chy2055/p/5220793.html  一.关于I/O模型的引出 我们都知道,为了OS的安全性等的考虑,进程是 ...

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

    Linux五种IO模型 同步和异步 这两个概念与消息的通知机制有关. 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.比如,调用readfrom系统调用时,必须等待IO操 ...

  7. Windows五种IO模型性能分析和Linux五种IO模型性能分析

    Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...

  8. (转载) Linux五种IO模型

    转载:http://blog.csdn.net/jay900323/article/details/18141217     Linux五种IO模型及分析   目录(?)[-] 概念理解 Linux下 ...

  9. I/O模型之一:Unix的五种I/O模型

    目录: <I/O模型之一:Unix的五种I/O模型> <I/O模型之二:Linux IO模式及 select.poll.epoll详解> <I/O模型之三:两种高性能 I ...

随机推荐

  1. 《Dare To Dream》第六次作业:团队项目系统设计改进与详细设计

    团队项目系统设计改进与详细设计 一.团队项目系统设计改进 任务1: a.分析项目系统设计说明书初稿的不足,特别是软件系统结构模型建模不完善内容.  初稿的不足:缺乏每个模块的具体业务流程详细设计和流程 ...

  2. Java & C# BCD编码与十进制转换

    using System;using System.Collections.Generic;using System.Text; namespace Base{ public class BCDHel ...

  3. EOS

    1.移植性特别差,例如用Eclipse,idea,等其他集成工具开发之后的项目,难以快速的搭建到EOS集成工具中(例如逻辑流,数据结构等)2.项目框架的局限性大,底层封装的框架或者组件迭代性较差,很难 ...

  4. webpack工程搭建

    >>建立nodejs工程 新建文件夹,npm init 生成package.json >>安装webpack 和 webpack-dev-server npm install ...

  5. 关于textarea标签自己遇到的问题

    效果描述: 固定文本框的宽高,让文本框不被拖拽,让提示内容的文字垂直居中 html: <div> <label>活动详情</label> <textarea ...

  6. 将.rpm转换为.tar.gz

    安装rpm2targz 下载rpm2targz:rpm2targz 解压 tar xzf rpm2targz-9.0.tar.gz chmod +x rpm2targz 1 2 将rpm2targz添 ...

  7. 关于STM32CubeMX使用LL库设置PWM输出

    HAL和LL库 HAL是ST为了实现代码在ST家族的MCU上的移植性,推出的一个库,称为硬件抽象层,很明显,这样做将会牺牲存储资源,所以项目最后的代码比较冗余,且运行效率大大降低,运行速度受制于fla ...

  8. oracle 按表数据新增一行

    在功能实现时,能尽量用一个sql语句直接实现业务逻辑的话,就不要去写C#代码,便于维护. 以下sql的逻辑是:给明细表新增一条数据,前提是传入的债券代码存在与债券表,否则不新增.此sql返回受影响行数 ...

  9. paloalto防火墙的优势

    1.所有 Palo Alto Networks 防火墙提供一个可用于执行防火墙管理功能的带外管理端口 (MGT).通过使用该 MGT 端口,可以将防火墙的管理功能与数据处理功能分开,从而保护对防火墙的 ...

  10. 机器学习--Lasso回归和岭回归

    之前我们介绍了多元线性回归的原理, 又通过一个案例对多元线性回归模型进一步了解, 其中谈到自变量之间存在高度相关, 容易产生多重共线性问题, 对于多重共线性问题的解决方法有: 删除自变量, 改变数据形 ...