笔记-编程-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. 2 cmd中startup显示运行不了显示“不是内部或外部命令”

    解决方案: 1 在C:\Windows\System32中检查cmd.exe是否存在(如果存在的话)(检查cmd.exe是否被误删) 2 在我的电脑——属性——环境变量——在系统变量找到Path编辑前 ...

  2. TX Text Control X10独家揭秘之使用对象作为数据源

    文档处理控件TX Text Control即将发布的X10版本,将升级重点还是放到了其比较优势的流式布局报表设计和生成上.慧都获得了来自其开发商Text Control GmbH公司的一手资料,迫不及 ...

  3. 构建第一个spring boot2.0应用之项目启动运行的几种方式(二)

    方法一. 配置Run/Debug Configuration  选择Main Class为项目 Application启动类(入口main方法) (2).进行项目目录,即包含pom.xml的目录下,启 ...

  4. StringBuffer是可变的还是不可变的?

    前言:我们知道String类的修饰符是final,其char[] value也是由final修饰的,每次给String变量赋一个新值,都会创建一个新的String对象,很多有涉及到字符串本身的改变都是 ...

  5. python资料汇总

    http://www.cnblogs.com/vamei/archive/2012/09/13/2682778.html

  6. IOS 某个控件出不来原因(经验分享)

    某个控件出不来:(检查原因) 1.frame的尺寸和位置对不对 2.hidden是否为YES 3.有没有添加到父控件中 4.alpha 是否 < 0.01 5.被其他控件挡住了 6.父控件的前面 ...

  7. IPC Gateway 设计

    1. IPC Gateway对外提供的功能: IPC的register/request/reply/notification服务. 2. IPC Gatew的实现原理: 各个具体的服务注册自己的回调函 ...

  8. 我的Linux学习之路的感悟

    首先要跟大家说声抱歉,这么久一直没有更新,有负大家对我的期望. 半年的Linux运维的学习到目前已工作一个月零9天,这一路走来的艰辛和挣扎只有自己最清楚. 首先要感谢公司的同事的宽容接纳和耐心指点.感 ...

  9. PHP 的那些错误总结

    问题1: [root@web01 data]# lsof  -i :9000 [root@web01 data]# /application/php/sbin/php-fpm /application ...

  10. python剑指offer 实现树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) # -*- coding:utf-8 -*- # class TreeNode: # def __ ...