笔记-编程-IO模型

1.      简介

常用IO模型

1)      同步阻塞IO(Blocking IO)

2)      同步非阻塞IO(Non-blocking IO)

3)      IO多路复用(IO Multiplexing)

4)      异步IO(Asynchronous IO)

5)      信号IO

注:这里主要讨论的是网络IO,linux和windows下有所不同,不过原理是相似的;

1.1.    相关概念

  1. 同步/异步

同步指前后两件任务,有严格的顺序一致性;

异步对顺序的要求和依赖关系没那么强;

  1. 阻塞/非阻塞

阻塞:请求-响应比较耗时,如IO

非阻塞:请求-响应比较迅速,如没有等待IP完成就直接返回状态

2.      IO模型

2.1.    阻塞IO

用户线程在读写时被阻塞

数据拷贝指请求到的数据先存放在内核空间, 然后从内核空间拷贝至程序的缓冲区

缺点在于如果数据没有就绪,就会一直阻塞在read方法处。

2.2.    非阻塞IO

用户线程不断发起IO请求. 数据未到达时系统返回一状态值; 数据到达后才真正读取数据,用户线程每次请求IO都可以立即返回;

缺点在于需不断轮询,无谓地消耗了大量的CPU,一般很少直接使用这种模型,而是在其他IO模型中使用非阻塞IO这一特性

2.3.    IO多路复用

使用一个线程去轮询多个socket状态,只有socket真正有读写事件时,才真正调用实际的IO读写操作,相比非阻塞,大大减少了资源占用。

一旦事件响应体很大,就会导致后续的事件迟迟得不到处理,并会影响新的事件轮询。

2.4.    异步IO

异步IO才是最理想的IO模型。

相比于IO多路复用,异步IO并不常用,因为目前操作系统对异步IO的支持并不完善,IO多路复用也基本够用. 有很多做法是用IO多路复用模型模拟异步IO(IO事件触发时不直接通知用户线程,而是将数据读写完毕后放到用户指定的缓冲区中)。
JDK7已经支持了AIO, netty采用过又放弃了, 据说是性能并没有多路复用好.

2.5.   
信号驱动IO模型

当用户线程发起一个IO请求操作,会给对应的socket注册一个信号函数;

然后用户线程继续执行,当内核数据就绪时,会发送一个信号给用户线程,开始IO操作;

一般用于UDP中,对于TCP套接口几乎没用的,原因是该信号产生的过于频繁,并且该信号的出现并没有告诉我们发生了什么事情。

笔记-编程-IO模型的更多相关文章

  1. 4.6 并发编程/IO模型

    并发编程/IO模型 背景概念 IO模型概念 IO模型分类 阻塞IO  (blocking IO) 特点: 两个阶段(等待数据和拷贝数据两个阶段)都被block 设置 server.setsockopt ...

  2. python 并发编程 io模型 目录

    python 并发编程 IO模型介绍 python 并发编程 socket 服务端 客户端 阻塞io行为 python 并发编程 阻塞IO模型 python 并发编程 非阻塞IO模型 python 并 ...

  3. Python Web学习笔记之并发编程IO模型

    了解新知识之前需要知道的一些知识 同步(synchronous):一个进程在执行某个任务时,另外一个进程必须等待其执行完毕,才能继续执行 #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调 ...

  4. Python之并发编程-IO模型

    目录 一.IO模型介绍二.阻塞IO(blocking IO)三.非阻塞IO(non-blocking IO)四.多路复用IO(IO multiplexing)五.异步IO(Asynchronous I ...

  5. 15 并发编程-(IO模型)

    一.IO模型介绍 1.阻塞与非阻塞指的是程序的两种运行状态 阻塞:遇到IO就发生阻塞,程序一旦遇到阻塞操作就会停在原地,并且立刻释放CPU资源 非阻塞(就绪态或运行态):没有遇到IO操作,或者通过某种 ...

  6. 并发编程 - io模型 - 总结

    1.提交任务得方式: 同步:提交完任务,等结果,执行下一个任务 异步:提交完,接着执行,异步 + 回调 异步不等结果,提交完任务,任务执行完后,会自动触发回调函数2.同步不等于阻塞: 阻塞:遇到io, ...

  7. python并发编程&IO模型

    一 IO模型介绍 为了更好地了解IO模型,可先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(n ...

  8. 并发编程——IO模型(6)

    1.IO模型分类 同步IO #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回.按照这个定义,其实绝大多数函数都是同步调用.但是一般而言,我们在说同步.异步的时候,特指那些需要 ...

  9. 并发编程——IO模型

    前言 同步(synchronous):一个进程在执行某个任务时,另外一个进程必须等待其执行完毕,才能继续执行 #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回.按照这个定义, ...

随机推荐

  1. 在sublime text3下,用快捷键把文件打开到浏览器中

    使用背景 在编辑html或者js文件的时候,是否想在浏览器中预览一下, 你的步骤可能是这样的: 找到编辑文件的位置, 右键使用某一浏览器打开.如果是这样,你就out了, 因为在sublime中有更加简 ...

  2. ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第十四天(非原创)

    文章大纲 一.淘淘商城总体架构介绍二.淘淘商城重要技术点总结三.项目常见面试题四.项目学习(all)资源下载五.参考文章 一.淘淘商城总体架构介绍 1. 功能架构   2. 技术选型 (1)Sprin ...

  3. 本地添加Maven管理

    Maven下载安装: 1 .Maven下载地址:http://maven.apache.org/ 2 .下载解压到本地指定目录:记住该路径! 3 .新建/修改环境变量-系统变量: 名:M2_HOME ...

  4. localstorage本地存储的应用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. css3动画-加载中...

    写几个简单的加载中动画吧. 像前面三种都是相当于几个不同的点轮流来播放同一动画:变大变小.css3里面有一个用于尺度变换的方法:scale(x,y):定义 2D 缩放转换,改变元素的宽度和高度. 第四 ...

  6. js识别中英文字符的字节长度并进行裁切

    //调用方法,传入字符串和需要返回的字节长度即可function cutstr(str,len){ var str_length = 0; var str_len = 0; str_cut = new ...

  7. 解析ASPX网页__doPostBack分页的网页table数据

    由于急于上线的功能要去客服系统里抓取数据进行验证,客服方面又没有时间开发EDI接口给到我,所以用了本办法:爬人家web系统上的数据进行分析. 由于客服的web系统用ASP.Net的__doPostBa ...

  8. sweetalert 1.0多次回调函数bug

    一个删除功能,原来的实现方式(注释部分)有多次的回调,会出现第二个swal窗口不显示,回调函数体不执行的情况.后来的解决方式是使用bootstrap的modal模态框,删除成功后显示模态框,模态框关闭 ...

  9. java核心技术 要点笔记1

    第1章 1.java特性 简单性,java语法是一个C++语法的纯净版本. 面向对象,java将重点放在数据和对象的接口上.java与C++的主要不同点在于多继承,在java中实现多继承的机制是采用接 ...

  10. 新建framework的bundle资源 linker command failed with exit code 1解決

    enable bitcode 设为no