本文带你鸟瞰I/O模型全貌,希望可以让你对I/O模型有一个直观的认识

什么是I/O?I/O的过程?同步阻塞 I/O同步非阻塞 I/OI/O多路复用异步I/O

什么是I/O?

  I/O就是计算机内存和外部设备之间拷贝数据的过程。
  那么I/O模型主要解决的问题是什么呢?程序通过CPU,请求外部设备上的数据。而数据拷贝到内存里需要一定的时间,在这个时间里,程序是主动让出CPU时间?还是让CPU不断的去查数据是否是到了?
  I/O模型就是用来解决这个决策问题。

I/O的过程?

  首先我们要明白。I/O通讯涉及到两个非常重要的对象。
  1.程序执行时的用户线程
  2.操作系统内核
  操作系统将进程的地址空间分为用户空间内核空间,用户线程是没有办法从内核空间直接获取数据,需要将数据从内核空间拷贝到用户空间,再获取用户空间的数据。
  所以任何I/O模型,网路数据的读取都可以分为2部分。
  1.用户线程等待内核将网卡中的数据,拷贝到内核空间
  2.内核将数据从内核空间拷贝到用户空间。
  各个I/O模型的区别就是实现这两个步骤的方法不同

同步阻塞 I/O

  用户线程发起read请求后就阻塞了,让出CPU,内核会等待网卡数据的到来,然后吧数据拷贝到内核空间,从内核空间拷贝到用户空间,再唤醒用户线程。

同步非阻塞 I/O

  用户线程不断发起read请求,数据没到内核空间时,每次都返回失败,直到数据到了内核空间,此时再调用read会阻塞,等待内核将内核空间的数据拷贝到用户空间,再唤醒用户线程。

I/O多路复用

  这里把用户线程的读取操作分为了2步,线程先发送select调用,问内核是否将数据准备好了,等数据准备好了,用户线程再发起read调用,在等待数据从内核空间拷贝到用户空间这段时间里,线程仍是阻塞的,一次select请求可以向内核查询多个数据通道(channel)的状态,所以才叫多路复用

异步I/O

  用户发起的read调用,会注册一个回调函数,read立即返回,等到内核将数据准备好后,调用回调函数完成处理,整个过程中,用户线程一直没有被阻塞

  最后,期待您的订阅和点赞,专栏每周都会更新,希望可以和您一起进步,同时也期待您的批评与指正!

图解I/O模型的更多相关文章

  1. 图解 Java 内存模型

    图解 Java 内存模型 (图片来自于:http://www.cnblogs.com/zhangs1986/p/7903722.html)

  2. 图解机器学习 | LightGBM模型详解

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/34 本文地址:http://www.showmeai.tech/article-det ...

  3. 图解jvm--(四)内存模型

    内存模型 java 内存模型 很多人将[java 内存结构]与[java 内存模型]傻傻分不清,[java 内存模型]是 Java Memory Model(JMM)的意思. 简单的说,JMM 定义了 ...

  4. BERT模型图解

    转载于 腾讯Bugly 发表于 腾讯Bugly的专栏 原文链接:https://cloud.tencent.com/developer/article/1389555 本文首先介绍BERT模型要做什么 ...

  5. 【转】JVM内存模型

    http://longdick.iteye.com/blog/473866 图解JVM内存模型 博客分类: JVM JVM活动SUN  /** *  转载请注明作者longdick    http:/ ...

  6. 模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用

    模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理.分类及应用 lqfarmer 深度学习研究员.欢迎扫描头像二维码,获取更多精彩内容. 946 人赞同了该文章 Atte ...

  7. 用实例带你深入理解Java内存模型

    摘要:本文的目的来理解 J V M 与我们的内存两者之间是如何协调工作的. 本文分享自华为云社区<一文带你图解Java内存模型>,作者: 龙哥手记 . 我们今天要特别重点讲的,也就是我们本 ...

  8. The Linux device model

    /sys和 /dev的疑问 1./dev 下放的是设备文件,是由应用层mknod创建的文件.假设底层驱动对mknod的设备号有相应的驱动,如open等函数.那么应用层open "/dev/* ...

  9. NMT 机器翻译

    本文近期学习NMT相关知识,学习大佬资料,汇总便于后期复习用,有问题,欢迎斧正. 目录 RNN Seq2Seq Attention Seq2Seq + Attention Transformer Tr ...

随机推荐

  1. 实战:CentOS 7.2 / Zabbix3.4安装graphtrees

    众所周知的 Zabbix图形显示问题,决定使用graphtrees 插件. 环境:CentOS7.2 + Zabbix 3.4 1)首先切换到root用户以获得足够的权限将资源下载到 /usr/sha ...

  2. vue项目实战

    本篇文章主要介绍了vue的环境配置,vue项目的目录结构以及在开发vue项目中问题的一些解决方案. 环境配置及目录结构 1.安装node.js(http://www.runoob.com/nodejs ...

  3. hihoCoder 1128 二分查找

    Description Input and Output Codes 描述#1128 : 二分·二分查找 Description Nettle最近在玩<艦これ>,因此Nettle收集了很多 ...

  4. 使用Lucene.Net做一个简单的搜索引擎-全文索引

    Lucene.Net Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎. ...

  5. Haproxy 使用block 阻止域名访问到某个子目录报403

    配置教程如下: acl is_https_com hdr_beg(host) www.baidu.com #定义规则域名 acl api_block_url_web url_dir -i /web/ ...

  6. 达拉草201771010105《面向对象程序设计(java)》第十六周学习总结

    达拉草201771010105<面向对象程序设计(java)>第十六周学习总结 第一部分:理论知识 1.程序与进程的概念: (1)程序是一段静态的代码,它是应用程序执行的蓝 本. (2)进 ...

  7. 一起了解 .Net Foundation 项目 No.12

    .Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. Cecil Cecil 是 ...

  8. SQLyog试用到期的解决方法(仅供个人学习使用,禁止转载或用于商业盈利)

    作者:EzrealYi 本章链接:https://www.cnblogs.com/ezrealyi/p/12434105.html win+r->输入regedit->进入注册表 在计算机 ...

  9. Java基础--冒泡排序算法

    冒泡排序算法的运作如下:(从后往前) 比较相邻的元素,如果第一个比第二个大,就交换他们两个. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的元素. 针对 ...

  10. 峰哥说技术:10-Spring Boot静态资源处理

    Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 10  峰哥说技术:Spring Boot静态资源处理 今天我们聊聊关于 Spring Boot 中关于静 ...