1:IO的过程

  当我们调用系统函数read时,一般会经历两个阶段:

  1:等待数据准备(waiting for the data be ready)

  2:将数组从内核拷贝到进程(从内核态到用户态)(copying the data from the kernel to the process)

  在"等待数据准备"这个状态,我们最常见到的就是网路请求,即内核等待网络中的数据到网口的缓冲区。在数据到网口的缓冲区后,才会发生第二阶段,将数据从内核态拷贝到用户进程(用户态)。

  所以我么常说各种IO模型就是对这两个状态的不同的描述

2:常用的IO模型有哪些

  IO模型大体分为两大类:同步IO和异步IO;同步IO又包含:阻塞IO,非阻塞IO,IO多路复用,信号驱动IO

  区别是什么呢?当我们调用系统函数read时

  阻塞IO(blocking IO): 在上述的两个状态(等待数据和拷贝数据)都被阻塞了

  非阻塞IO(non-blocking IO):在这个场景中,在第一阶段,用户进程是会不断轮询kernel是否准备好数据。kernel准备没准备好数据都会返回,如果准备好,进行第二阶段。如果没准备好则返回error,用户进程收到error后会继续轮询知道数据准备好。

  IO多路复用(IO Multiplxing):又叫事件驱动IO。底层用的是 select/poll/epoll等调用,有点是单个线程可以监控多个网路IO。而在阻塞IO模型中,则必须使用多线程才能达到同样的效果。注意:这不意味着多路服用处理单个连接能处理的更快,只是单个线程能处理更多的连接。

  信号驱动(signal IO):这个场景中,用户进程会通知内核,在数据准备好后要发个信号通知用户进程;用户进程在收到信号后发起系统调用等待内核将数据拷贝到用户线程。在第二阶段仍是阻塞的。

  异步IO(asynchronous IO):这个和信号驱动类似,不同的是直到数据拷贝到用户进程后才会发信号通知用户进程。整个过程不会阻塞用户线程。 

3:IO多路复用和多线程的区别以及使用场景

  上面我们说到,在阻塞模式下,一个服务想要并行处理多个IO尽量使用多线程。但是创建线程耗时耗资源,所以我们一般都是使用线程池来代替多线程。

  我们也说到,多路复用可以单线程监控多个IO。而且单线程不会涉及到多线程同步的问题,也不会涉及到CPU线程上下文切换的问题。但是缺点也随之而来,如果同时有大量的IO需要处理的话,那么排在后面IO肯定等待的时间长。因此,这种场景适用于那些有大量连接,但是数据交互不频繁的场景,如聊天室。而多线程适用与那些大量短连接的场景,如web服务器。

  我们了解到的nginx,tornado,redis等都用了IO多路复用技术。Java中的NIO指的是(new IO),用的也是IO多路复用技术,而不是non-blocking IO。

4:计算密集型和IO密集型

  计算密集型任务最主要的是消耗CPU资源,即CPU运行时间/IO等待时间的比值高。如常见的加密解密,转码等操作都是很耗CPU的。在CPU密集型任务中,为了使CPU得到充分的利用,我们一般会采用多线程。但是线程数量不易太大,一般和CPU核心数持平,如果线程数量过大,可能会CPU会频繁的在线程间切换,造成资源浪费。而且CPU密集型任务使用执行效率比较高的语言也很重要。

  对于IO密集型任务,IO时间要远大于CPU运行时间。所以任务越多,那么CPU的效率也就越高。对于这种任务,使用执行效率高的语言对整体影响不大。我们可以在IO没有达到峰值的时候增加任务,如果IO已经达到峰值,再添加任务也只能等待了。

5:CPU和线程的关系

  CPU是系统资源,而线程可以看成我们的要执行指令的集合。我们的指令是否要执行是我们指定的,但是什么时候执行却是系统调度的。例如在线程执行一个阻塞命令时,CPU会闲置,也可以去处理其他的任务。

IO多路复用?我所理解的IO模式的更多相关文章

  1. 聊聊IO多路复用之select、poll、epoll详解

    本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538922&idx=1&sn=e6b436ef ...

  2. IO多路复用,同步,异步,阻塞和非阻塞 区别

    一.什么是socket?什么是I/O操作? 我们都知道unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO.管道.终端,对我们来说,一切都是 ...

  3. IO多路复用,同步,异步,阻塞和非阻塞 区别(转)

    转自:http://www.cnblogs.com/aspirant/p/6877350.html?utm_source=itdadao&utm_medium=referral 同步.异步 是 ...

  4. python 全栈开发,Day44(IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)

    昨日内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yield,greenlet 遇到IO gevent: 检测到IO,能够使用greenlet实现自动切换,规避了IO阻 ...

  5. 并发编程(IO多路复用)

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

  6. 什么是IO多路复用?Nginx的处理机制

    先来说一下什么是IO复用? IO复用解决的就是并发行的问题,比如多个用户并发访问一个WEB网站,对于服务端后台而言就会产生多个请求,处理多个请求对于中间件就会产生多个IO流对于系统的读写.那么对于IO ...

  7. 39 - 同步-异步-IO多路复用

    目录 1 同步与异步 2 阻塞与非阻塞 3 什么是IO 3.1 内核态用户态 3.2 IO两个阶段 3.3 IO模型 3.3.1 同步阻塞IO 3.3.2 同步非阻塞IO 3.3.3 IO多路复用 3 ...

  8. IO多路复用,协程,

    一.单线程的并发 import socket import select client1 = socket.socket() client1.setblocking(False) # 百度创建连接: ...

  9. python开发IO模型:阻塞&非阻塞&异步IO&多路复用&selectors

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

随机推荐

  1. 京东云携手HashiCorp,宣布推出Terraform Provider

    2019年4月23日消息,京东云携手云基础设施自动化软件的领导者HashiCorp,宣布推出Terraform Provider for JD Cloud,这意味着用户能够在京东云上轻松使用简单模板语 ...

  2. IDC:助力转型、深入变革:中国云专业服务市场持续升温

    来源:IDC 北京,2019 年 10 月 24 日——随着云计算在中国市场更深入和广泛的应用,与云相关的专业服务(咨询.迁移.开发与建设服务)需求旺盛.IDC 首次发布的<2019 年上半年云 ...

  3. 画线缩放、瞳距缩放、Line延长到指定长度,内附效果,源码供应,解压就跑

    前言 公司项目需要做个画线缩放,我司称之为瞳距缩放,简而言之就是:2张图,从第一张图画一条线,再从第二个图画一条线,第二条线以第一条为基准,延长到一致的长度,并同比缩放图片:文字太枯燥,请先实例图 例 ...

  4. Ubuntu19 安装Theano出现“No module named ‘theano.compat.six’”

    解决办法:直接在下载好pythearn2包的目录下,对setup.py文件进行修改:将  from theano.compat.six.moves import input 改为  from six. ...

  5. SpringCloud服务过滤filter

    一.目录展示 二.application.yml配置文件 三.MyZuulFilter package com.zn.filter; import com.netflix.zuul.ZuulFilte ...

  6. WebShell代码分析溯源(十一)

    WebShell代码分析溯源(十一) 一.一句话变形马样本 <?php $e = $_REQUEST['e'];declare(ticks=1);register_tick_function ( ...

  7. 精通awk系列(2):本教程测试所用示例文件

    回到: Linux系列文章 Shell系列文章 Awk系列文章 本系列的awk教程中,将大量使用到如下示例文件a.txt. ID name gender age email phone 1 Bob m ...

  8. 【JS档案揭秘】第三集 深入最底层探秘原型链

    关于这部分我看过大量的文章,数不胜数,包括阮一峰的继承三部曲,还有各种慕课的视频教程,网上无数继承方法的对比.也对很多概念存在长期错误的理解.今天做一个正确的总结,用来给原型链和继承这块知识画上句号, ...

  9. SAP IDOC 通过采购订单输出消息生成销售订单

    题记: 在网络上看到一篇类似的公众号文章,叫<通过IDoc逐步指导PO&SO集成>,个人觉得整个配置过程中还是少了一些重点配置,也少了说明整个功能的核心逻辑,那么,趁着这个机会,就 ...

  10. 官方版vs2008至vs2013下载地址

    Visual Studio 2005 Professional 官方90天试用版 英文版:http://download.microsoft.com/download/e/0/4/e04de840-8 ...