图解I/O模型
本文带你鸟瞰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模型的更多相关文章
- 图解 Java 内存模型
图解 Java 内存模型 (图片来自于:http://www.cnblogs.com/zhangs1986/p/7903722.html)
- 图解机器学习 | LightGBM模型详解
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/34 本文地址:http://www.showmeai.tech/article-det ...
- 图解jvm--(四)内存模型
内存模型 java 内存模型 很多人将[java 内存结构]与[java 内存模型]傻傻分不清,[java 内存模型]是 Java Memory Model(JMM)的意思. 简单的说,JMM 定义了 ...
- BERT模型图解
转载于 腾讯Bugly 发表于 腾讯Bugly的专栏 原文链接:https://cloud.tencent.com/developer/article/1389555 本文首先介绍BERT模型要做什么 ...
- 【转】JVM内存模型
http://longdick.iteye.com/blog/473866 图解JVM内存模型 博客分类: JVM JVM活动SUN /** * 转载请注明作者longdick http:/ ...
- 模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用
模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理.分类及应用 lqfarmer 深度学习研究员.欢迎扫描头像二维码,获取更多精彩内容. 946 人赞同了该文章 Atte ...
- 用实例带你深入理解Java内存模型
摘要:本文的目的来理解 J V M 与我们的内存两者之间是如何协调工作的. 本文分享自华为云社区<一文带你图解Java内存模型>,作者: 龙哥手记 . 我们今天要特别重点讲的,也就是我们本 ...
- The Linux device model
/sys和 /dev的疑问 1./dev 下放的是设备文件,是由应用层mknod创建的文件.假设底层驱动对mknod的设备号有相应的驱动,如open等函数.那么应用层open "/dev/* ...
- NMT 机器翻译
本文近期学习NMT相关知识,学习大佬资料,汇总便于后期复习用,有问题,欢迎斧正. 目录 RNN Seq2Seq Attention Seq2Seq + Attention Transformer Tr ...
随机推荐
- 红杉资本的Dropbox上市,国内哪些产品会跟着受益?
每一个估值达到10亿美元以上的互联网.科技独角兽企业,都将上市当做"终极荣光".但事实上,上市只是这些独角兽企业开启全新时代的开端而已.很多气势汹汹且看似前景一片光明的独角兽 ...
- nginx安装与fastdfs配置--阿里云
上一篇文章:fastDFS 一二事 - 简易服务器搭建之--阿里云 做了fastDFS的服务安装和配置,接下来我们来看nginx的安装 第一步:安装nginx需要安装的一些环境: 1.例如: yum ...
- [BZOJ 1412][ZJOI 2009] 狼和羊的故事
题目大意 有一个 (n times m) 的网格,每一个格子上是羊.狼.空地中的一种,羊和狼可以走上空地.现要在格子边上建立围栏,求把狼羊分离的最少围栏数. (1 leqslant n, ; m le ...
- 百度地图API:使用百度定位
准备工作: 1.申请百度地图API 2.下载百度地图的SDK 3.将SDK包中的BaiduLBS_Android.jar文件放到,项目里的app/libs里面 4.在src/main目录下创建一个名为 ...
- 先治再扶,重灾区后的P2P你还敢投吗?
互联网强大的包容性和创新性,给予很多新生事物成长的空间.而其全面普及与快速传播的特性,也让任何事物都像被放在放大镜乃至显微镜下,几乎无形遁形.这样一来,新生事物很容易被"神化" ...
- vue-router03 vue-cli
1.钩子: next讲解: next()进行路由跳转 next(false)取消路由跳转 beforeRouteEnter (to, from, next) { next(vm => { // ...
- [转帖]RSYNC 的核心算法
RSYNC 的核心算法 https://coolshell.cn/articles/7425.html rsync是unix/linux下同步文件的一个高效算法,它能同步更新两处计算机的文件与目录,并 ...
- ubuntu16.04安装库、插件报错:
安装一些插件.库,遇到报错 Could not fetch URL https://pypi.org/simple/pytest-pycodestyle/: There was a problem c ...
- 进阶之路 | 奇妙的Thread之旅
前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 需要已经具备的知识: Thread的基本概念及使用 AsyncTask的基本概念及使用 学习清单: 线程概述 ...
- 「从零单排HBase 05」核心特性region split
HBase拥有出色的扩展性,其中最依赖的就是region的自动split机制. 1.split触发时机与策略 前面我们已经知道了,数据写入过程中,需要先写memstore,然后memstore满了以后 ...