前言

我们经常看到阻塞/非阻塞,同步/异步这两组容易混淆的概念,那么该如何区分呢?

用户空间和内核空间

内核是操作系统的核心,可以访问底层硬件设备的所有权限。为了保护内核安全,就把操作系统的内存空间分为:内核空间和用户空间。

这两个空间是独立的。

使用 TCP 发送数据时,需要先将数据从用户空间拷贝到内核空间,再用内核操作将数据从内核空间发出。

当我们使用 TCP 读取数据时,先在内核空间准备好,再从内核空间拷贝到用户空间使用。

IO 五种模型

IO 五种模型分别是 :阻塞型 IO、非阻塞 IO、IO 多路复用、信号驱动 IO、异步 IO。

阻塞型 IO

用户进程发起请求时,阻塞到数据拷贝到用户空间才为止。

阻塞 IO 在这两个阶段都是阻塞的。(发送数据拷贝到内核空间是阻塞的,内核空间拷贝到用户空间,返回数据也是阻塞的)

非阻塞 IO

用户进程不断询问内核,数据准备好了吗?直到内核说准备好了,将数据从内核空间拷贝到用户空间。

非阻塞IO第一阶段不阻塞(用户进程询问内核,会立即得到回应,不阻塞 ),第二阶段会阻塞(要等着内核空间拷贝数据到用户空间并返回)。

IO 多路复用

多个 IO 操作共同使用一个 selector(选择器)去询问哪些 IO 需要的数据准备好了,selector 负责通知那些准备好的 IO,那些 IO 再自己去请求内核数据。

IO 多路复用,第一阶段会阻塞到 slector 上,第二阶段拷贝数据也会阻塞。

信号驱动 IO

用户进程发起读取请求前先注册一个信号给内核说明自己需要什么数据,这个注册立刻返回。等内核准备好了,主动通知用户进程,用户进程再读取数据,等待数据从内核空间拷贝到用户空间再返回。

信号驱动 IO,第一阶段不阻塞(注册信号会立刻返回),第二阶段阻塞(需要等待数据从内核空间拷贝到用户空间)。

异步 IO

用户进程读取数据请求后立马返回,当数据从内核空间拷贝到用户空间再通知用户直接使用数据。

异步IO,两个阶段都不阻塞。

总结

阻塞和非阻塞

阻塞:调用结果返回之前,当前线程会被挂起,直到调用结果返回。

非阻塞:不能立即得到结果之前,当前线程不会被挂起,可以做其他事。

阻塞调用后必须等着结果返回,非阻塞调用之后爱干什么干什么

同步与异步

同步:调用者会被阻塞,直到 IO 操作完成,调用的结果随着请求的结束返回。

异步:调用者不会被阻塞,调用的结果不随着请求的结束而返回,而是通过通知或者回调函数的形式返回。

也就是说,阻塞/非阻塞,更关心的是当前线程是不是被挂起。而同步/异步,更关心的是调用结果是不是随着请求结束而返回。

所以 IO 五种模型中,阻塞IO、非阻塞IO、多路复用IO、信号驱动IO都是同步IO,只有最后一个才是异步IO。

IO 的五种模型是什么的更多相关文章

  1. IO的五种模型

    为了区分IO的五种模型,下面先来看看同步与异步.阻塞与非阻塞的概念差别. 同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.按照这个定义,其实绝大多数函数都是同步调用(例如 ...

  2. 2. 彤哥说netty系列之IO的五种模型

    你好,我是彤哥,本篇是netty系列的第二篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 本文将介绍linux中的五种IO模型,同时也会介绍阻塞/非阻塞与同步/异步的区别. ...

  3. 【网络IO系列】IO的五种模型,BIO、NIO、AIO、IO多路复用、 信号驱动IO

    前言 在上一篇文章中,我们了解了操作系统中内核程序和用户程序之间的区别和联系,还提到了内核空间和用户空间,当我们需要读取一条数据的时候,首先需要发请求告诉内核,我需要什么数据,等内核准备好数据之后 , ...

  4. Linux IO的五种模型 ongoing

    服务器端编程经常需要构造高性能的IO模型,常见的IO模型: 阻塞I/O模型  (Blocking IO) ------------(同步)(阻塞) 非阻塞I/O模型 (Non-Blocking IO) ...

  5. 图解I/O的五种模型

    1.1 五种I/O模型 1)阻塞I/O 2)非阻塞I/O 3)I/O复用 4)事件(信号)驱动I/O 5)异步I/O 1.2 为什么要发起系统调用? 因为进程想要获取磁盘中的数据,而能和磁盘打交道的只 ...

  6. socket编程五种模型

    客户端:创建套接字,连接服务器,然后不停的发送和接收数据. 比较容易想到的一种服务器模型就是采用一个主线程,负责监听客户端的连接请求,当接收到某个客户端的连接请求后,创建一个专门用于和该客户端通信的套 ...

  7. Linux-I/O五种模型

    一. 概念说明 在进行解释之前,首先要说明几个概念: 用户空间和内核空间 进程切换 进程的阻塞 文件描述符 缓存 I/O 同步(Sync)/异步(Async) 阻塞(Block)/非阻塞(Unbloc ...

  8. linux第7天 I/O的五种模型, select

    服务器端避免僵尸进程的方法: 1)通过忽略SIGCHLD信号,解决僵尸进程 signal(SIGCHLD, SIG_IGN) 2)通过wait方法,解决僵尸进程 signal(SIGCHLD, han ...

  9. 说说基于网络的五种IO模型

    # django不是一个异步框架 # tornado是异步的web框架 # 处理每秒大量的请求 # 个人理解的IO:就是应用层与内核驱动层的交互,这个过程无论从应用层到内核中,还是驱动层等待硬件层的数 ...

随机推荐

  1. ceph unfound objects 处理

    ceph Vol 45 Issue 1 1.unfound objects blocking cluster, need help! Hi, I have a production cluster o ...

  2. DP中环形处理 +(POJ 1179 题解)

    DP中环形处理 对于DP中存在环的情况,大致有两种处理的方法: 对于很多的区间DP来说,很常见的方法就是把原来的环从任意两点断开(注意并不是直接删掉这条边),在复制一条一模一样的链在这条链的后方,当做 ...

  3. Linux(centos6.8)配置Tomcat环境

    1.下载Linux版的Tomcat包 (1)通过官方下载 tomcat官方:https://tomcat.apache.org/download-80.cgi (2)通过分享下载 如网盘分享等途径 2 ...

  4. a标签中的target

    html中target四种选择_blank._parent._self._top,分别是什么意思? eg:<Cell title="Open link in new window&qu ...

  5. bWAPP----Mail Header Injection (SMTP)

    Mail Header Injection (SMTP) 本地没有搭环境,没法演示,附上转载的 https://www.acunetix.com/blog/articles/email-header- ...

  6. 两年经验拿到蚂蚁金服,字节offer,附上金九银十BAT面试核心知识点整理

    前言 我自己是本科毕业后在老东家干了两年多,老东家算是一家"小公司"(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身),毕业这两年多我也没有在大厂待过,因此找 ...

  7. 怎么用MindManager制作议论文思维导图

    大家都写过作文吧,做小学到高考到大学,这是谁也摆脱不了的,但是大家写作文会提前把自己的思路整理出来吗?让自己行文更为顺畅,作文更为流利吗?特别是关于议论文,一直是高考写作的一个重点篇目,写好议论文,就 ...

  8. 苹果电脑中怎么快速卸载Flash Player和浏览器扩展应用插件

    Adobe Flash Player是一款轻量级浏览器插件,帮助你在网页浏览过程中享受更广泛的多媒体体验.是一种拓展,与Java一样,成为安全和隐私问题的重要来源.这些都需要手动删除的Flash是令人 ...

  9. MySQL优化篇(未完待续)

    一.优化SQL语句的一般步骤 1.通过 show status命令了解各种sql的执行频率 mysql客户端连接成功后,通过show[session|global] status命令,可以查看服务器的 ...

  10. layer 父弹窗获取子弹窗内的dom节点元素和变量

    1 var body = layer.getChildFrame('body', index); //获取子弹窗的dom节点 2 3 var iframeWin = window[layero.fin ...