玩转BIO,NIO,AIO,阻塞 同步 与IO多路复用
1.啥是IO?
2.讲明白同步和阻塞俩概念
3.啥是IO多路复用,操作系统层的演进
4.对比BIO,NIO,AIO
四步玩转IO
1.啥是IO
计算机核心三大功能: Input 计算 OutPut
IO重要吧 没有IO计算机变成玩具,
那IO又可分为几种 常用的,磁盘IO 网络IO
闭眼睛想 如果IO不给力,计算机运算能力再牛逼 会不会影响整体效率的,非常影响
从底层磁盘看IO: 啥是磁盘IO
2. 同步与阻塞
同步与异步,指的是API,接口,服务调用等层面的概念。
同步指的是一步一步来,上一步执行完 返回结果 才能执行下一步, 异步指的是 不需要等上一步执行完返回结果,就能执行下一步。
举个简单的例子就是 java线程池, 把具体的任务丢到线程池里就不管了,主线程可以继续干别的事了,不需要阻塞在那等任务执行完,线程池主要的目的也是为了完成异步。
通常异步的执行可以通过回调接口来获取执行结果,如FutureTask,可以获取到异步执行的情况
阻塞与非阻塞,指的是底层操作系统IO层面的概念。
阻塞指的是 进程调用操作系统执行IO,IO执行完成之前,进程会一直阻塞在那等待,直到IO完成获取到返回结果
非阻塞指的是 进程调用操作系统执行IO,IO没有完成会直接返回失败结果,进程循环去调用直到IO完成,或者IO完成后操作系统回调接口来通知进程拿数据。总而言之 进程不需要在那一动不动的阻塞住等IO 这就是非阻塞。
现在区别开同步和阻塞,一个是应用接口调用层面,一个是底层操作系统IO层面,两者的思想很相近
3.啥是IO多路复用,操作系统层的演进
4.对比BIO,NIO与AIO
BIO: 也称同步阻塞IO,顾名思义 应用调用层是同步的,操作系统层是阻塞的。 可以参考java InputStream流,当read磁盘数据时,read()方法会阻塞在那,而底层也会阻塞在那等待IO完成
NIO: 也成同步非阻塞IO,应用调用层是同步的,操作系统层是非阻塞的。 非阻塞是由于从操作系统采用了IO多路复用,
原文地址:https://www.cnblogs.com/ttaall/p/15123298.html
- 大数据和云计算技术周报:NoSQL特辑
- 常用业务接口界面化 in python flask
- 打印机设置(PrintDialog)、页面设置(PageSetupDialog) 及 RDLC报表如何选择指定打印机
- 区块链推动支付革命
- MySQL常见的库操作,表操作,数据操作集锦及一些注意事项
- nohup命令
- 跨浏览器的剪贴板访问解决方案
- 装逼必备:大型分布式网站术语分析
- 年前爆炸一波!小程序视频功能来了!
- ubuntu13.04环境hadoop1.2.1单机模式安装
- silverlight:telerik RadControls中RadGridView的一个Bug及解决办法
- scope引起的问题
- JS正则表达式常用函数汇总
- 修改(同步)linux时间
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何安装 Elastic 栈中的 Logstash
- 你的GitHub项目被封存到北极了吗?
- Logstash: 如何创建可维护和可重用的 Logstash 管道
- 手把手教你微信好友头像形成指定的文字
- Logstash: 应用实践 - 装载 CSV 文档到 Elasticsearch
- LeetCode 剑指 Offer 28. 对称的二叉树
- Mysql拼接查询结果
- 手把手教你如何重建二叉树(超精彩配图)
- 一文搞定插入排序算法
- LeetCode 107. 二叉树的层次遍历 II
- LeetCode 103. 二叉树的锯齿形层次遍历
- 我是怎么一步一步调试出来二叉树的遍历(超精彩配图),二叉树遍历再也不用愁了
- 重中之重的二分查找
- LeetCode 剑指Offer 面试题27. 二叉树的镜像
- 一文搞定选择排序算法