java IO 模型--快速分清 同步|阻塞
IO 介绍
IO 模型
IO请求 分为两个阶段:等待资源 和 使用资源;
IO请求:一般需要请求特殊资源(如 磁盘、RAM 或文件),当资源被上一个使用者使用没有释放的时候, IO请求会被阻塞,直到资源可用。
等待资源 阶段有两种策略:
- 阻塞:当IO请求资源没有准备好的时候,请求阻塞,直到得到资源的响应(有资源 或者 超时异常);
- 非阻塞:资源不可用时,IO请求直接返回,返回数据不可用标志。
使用资源 阶段,IO 分为 同步IO 和 异步IO
- 同步IO:应用阻塞在发送数据和接受数据阶段,直到数据发送或接收完毕 或 失败返回;
- 异步IO:应用发送或接受数据后,即返回,数据写入OS 缓存,由OS 完成数据的发送或接受,完成后,发送成功后失败标志给应用。
Unix IO 模型
- 阻塞IO:等待资源阻塞,使用资源同步;
- 非阻塞IO:等待资源轮询,使用资源同步;
- IO 复用:支持多路复用,等待阻塞在复用选择器上,使用资源同步的方式;
- 信号驱动 :等待资源通知,使用资源同步;
- 异步IO :等待 和 使用 采用通知的方式。
各种IO特点:
- 阻塞IO:使用简单,但是每个socket请求会新建一个线程处理,这些线程大多数是没有运算的,造成线程的膨胀;Java BIO 使用这种方式。
- 非阻塞IO:采用轮询的方式,因此不会造成线程的膨胀。java NIO 采用这种方式,大大减少了线程数,可以使用一个线程完成对所有socket 的监听。
另外,NIO 底层采用多路复用IO的方式(select阻塞,支持多路复用),但是java 的实现接口,采用了轮询的方式,貌似一种非阻塞的形态。 - 同步IO:IO 操作结束之后才返回,效率低些,但是编程方式简单。java BIONIO 都是采用这种方式。
- 异步IO:由于异步IO 只是写入了缓存,由缓存到磁盘成功与否未可知,因此异步IO 相当于把IO操作分成了两部分:发起请求,获取返回结果。因此对应用来说增加了编程复杂性。
但是异步IO的性能是非常好的,而异步的思想贯穿了IT系统的方方面面。
一些概念:
1、 IOPS:每秒处理的IO 数量。
2、多路复用技术:
信号通路的带宽大于单一信号的数据量大小,为了有效利用带宽,希望信号通路可以一次性传递多个信号数据,这就是多路复用技术。
nio中就是,一个线程可以监听多个通信信道(不同的socket),所以是多个通信信道复用一个监听|轮询线程,即多路复用
分类:频分多路复用 和 时分多路复用
IO 组合方式:

java IO 模型--快速分清 同步|阻塞的更多相关文章
- Java IO模型:BIO、NIO、AIO
Java IO模型:BIO.NIO.AIO 本来是打算直接学习网络框架Netty的,但是先补充了一下自己对Java 几种IO模型的学习和理解.分别是 BIO.NIO.AIO三种IO模型. IO模型的基 ...
- java io 模型重点讲述
java io 模型重点讲述 bio(阻塞) 同步IO 接受请求与处理请求用同一条线程 aio 应用程序线程会向系统注册一个socket请求,以及一个回调方法,继续执行下去.socket接受区的数据监 ...
- IO模型介绍 以及同步异步阻塞非阻塞的区别
阻塞:用户进程访问数据时,如果未完成IO,等待IO操作完成或者进行系统调用来判断IO是否完成非阻塞:用户进程访问数据时,会马上返回一个状态值,无论是否完成 同步:用户进程发起IO(就绪判断)后,轮 ...
- IO模型对比:同步、异步、阻塞、非阻塞
最近工作接触到了网络服务同步和异步,所以学习了下<UNIX网络编程>,在此作下总结. 一.I/O模型 输入/输出(I/O)是在主存和外部设备(如磁盘驱动器.终端和网络)之间拷贝数据的过程. ...
- Java IO模型
Linux的内核将所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor(fd,文件描述符).而对一个Socket的读写也会有相应的描述 ...
- 深入浅出java IO模型
一.同步和异步 同步:一个事件或者任务的执行,会使整个流程暂时等待,也就是说如果有多个任务要执行,必须要逐个进行. 异步:一个事件或者任务的执行,不会使整个流程暂时等待,也就是说如果有多个任务要执行, ...
- Java IO(3)非阻塞式输入输出(NIO)
在上篇<Java IO(2)阻塞式输入输出(BIO)>的末尾谈到了什么是阻塞式输入输出,通过Socket编程对其有了大致了解.现在再重新回顾梳理一下,对于只有一个“客户端”和一个“服务器端 ...
- IO模型《二》阻塞IO
阻塞IO(blocking IO) 在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样: 当用户进程调用了recvfrom这个系统调用,kernel就开始 ...
- 谈IO中的阻塞和非阻塞,同步和异步及三种IO模型
什么是同步和异步? 烧水,我们都是通过热水壶来烧水的.在很久之前,科技还没有这么发达的时候,如果我们要烧水,需要把水壶放到火炉上,我们通过观察水壶内的水的沸腾程度来判断水有没有烧开.随着科技的发展,现 ...
随机推荐
- 企业安全06-Fastjson-CNVD-2017-02833
Fastjson-CNVD-2017-02833 一.漏洞概述 fastjson在解析json的过程中,支持使用@type字段来指定反序列化的类型,并调用该类的set/get方法来访问属性,当组件开启 ...
- 【线程池】core与非core
core和非core的区别: 当线程数小于core size时我们取task是这么取得: 小于时用poll并设置超时时间,否则用take阻塞等待 第二条件就出去了 没有拿到task的worker线程会 ...
- Nacos windows下 ERROR Nacos failed to start, please see
如果是windows 本地启动 直接到你本地\nacos\bin下 用cmd 启动即可 startup.cmd -m standalone 看见它你就算是 完成 了 直接访问下本的的端口 h ...
- Apache Flink 如何正确处理实时计算场景中的乱序数据
一.流式计算的未来 在谷歌发表了 GFS.BigTable.Google MapReduce 三篇论文后,大数据技术真正有了第一次飞跃,Hadoop 生态系统逐渐发展起来. Hadoop 在处理大批量 ...
- Ubuntu 16.04添加阿里云源
转自:http://www.cnblogs.com/EasonJim/p/7119156.html 添加国内源有个好处,比如下载软件时直接时国内的服务器,速度有保证. 以下是操作方法: 1.备份 su ...
- 深入理解python
1 python自身的威力 1.1 使用type.str.dir.其他内置函数 //type函数:返回任意对象的数据类型.比如:整型.字符串.列表.字典.元组.函数.类.模块,甚至类型对象都可以作为参 ...
- HBase的基本使用(安装配置、启动关闭、hbash shell的基本操作、phoenix、实战)
HBase的前提条件: JDK SSH Hadoop JDK:Hadoop和JDK运行的环境,他们的守护进程运行在JVM下.HBase支持JDK 1.6以上的版本.比如: jdk-8u161-linu ...
- 0、tensorflow学习开始
结合tensorflowtf 2.x , tensorflow 1.x, pytorch来深入理解深度学习架构,用博客来记录这一系列,日后也方便回顾,博客中也会加入个人理解和感悟 参考的博客列表如下: ...
- 第 3篇 Scrum 冲刺博客
一.站立式会议 1.站立式会议照片 2.昨天已完成的工作 登录窗口的构建 3.今天计划完成的工作 ①帮助不会的同学连接数据库 ②登录识别模块 4.工作中遇到的困难 ①出现一些同学使用了不同种类的数据库 ...
- 助力用户选择更优模型和架构,推动 AI机器视觉落地智能制造
智能制造的全新 "视界" 由互联网大潮掀起的技术进步,推动着智能制造成为传统制造行业面向未来.寻求突破的关键路径.通过融合机器人.大数据.云计算.物联网以及 AI 等多种技术, ...