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、多路复用技术:
信号通路的带宽大于单一信号的数据量大小,为了有效利用带宽,希望信号通路可以一次性传递多个信号数据,这就是多路复用技术。
分类:频分多路复用 和 时分多路复用

IO 组合方式:

原文地址:https://www.cnblogs.com/paxing/p/10664920.html

时间: 2024-08-28 16:15:51

java IO 模型--快速分清 同步|阻塞的相关文章

Java IO模型&NIO

Java IO模型&NIO Java IO模型NIO 楔子 概述 网络服务 经典的服务设计 经典的SocketServer循环阻塞 可伸缩目标 分而治之 事件驱动设计 背景知识AWT 事件 Reactor 模式 Reactor基础模式 Java NIO 支持 Channels Buffers Selectors SelectionKeys Reactor 模式实践 第一步初始化 第二步循环分发 第三步接收者 第四步 Handler设置 第五步请求处理 还有一种状态Handler 多线程版本Rea

Java IO模型:BIO、NIO、AIO

Java IO模型:BIO.NIO.AIO 本来是打算直接学习网络框架Netty的,但是先补充了一下自己对Java 几种IO模型的学习和理解.分别是 BIO.NIO.AIO三种IO模型. IO模型的基本说明 BIO模型图 缺点: 如果有很多个Client,则会产生很多个线程.压力主要是在服务器端.客户端的压力并不大. 另外建立连接之后,并不是在时时刻刻的使用.会有空间时间. 会阻塞. NIO模型图 特点: 事件驱动 多路复用 Netty底层使用的NIO模型 AIO模型 目前还未得到广泛运用.异步

IO模型介绍 以及同步异步阻塞非阻塞的区别

阻塞:用户进程访问数据时,如果未完成IO,等待IO操作完成或者进行系统调用来判断IO是否完成非阻塞:用户进程访问数据时,会马上返回一个状态值,无论是否完成 同步:用户进程发起IO(就绪判断)后,轮询内核状态异步:用户进程发起IO后,可以做其他事情,等待内核通知 介绍一下IO模型 网络IO模型和文件IO模型是一样的,上图是IO的5种模型,包括阻塞IO.非阻塞IO.多路复用IO.信号驱动的IO.异步IO. 一次IO包括两个过程,内核数据准备 .把数据从内核空间copy到用户空间. 1.阻塞IO(re

IO模型对比:同步、异步、阻塞、非阻塞

最近工作接触到了网络服务同步和异步,所以学习了下<UNIX网络编程>,在此作下总结. 一.I/O模型 输入/输出(I/O)是在主存和外部设备(如磁盘驱动器.终端和网络)之间拷贝数据的过程.输入是从I/O设备拷贝数据到主存,而输出是从主存拷贝数据到I/O设备.比如,网络可视为一个I/O设备,作为数据源和数据接收方.系统可以经过网络读取其他机器发送来的数据,并将数据复制到自己主存中. 下面分别介绍Unix的5种I/O模型: 阻塞式IO 非阻塞IO IO复用 信号驱动IO 异步IO 一个输入操作通常

JAVA - IO模型

本章内容 1 同步,异步,阻塞,非阻塞的概念 2 五种IO模型:阻塞式IO,非阻塞式IO,多路复用IO,信号驱动IO,异步IO 各自的特点 同步,异步,阻塞,非阻塞(注意:这里是从用户线程和内核层面来介绍概念的) 同步和异步(描述的是用户线程与内核的交互方式 - 消息的通信机制) 1 同步 用户线程发起IO后需要等待 2 异步 用户线程发起IO请求后仍然继续执行,当内核操作完成后会通知用户线程,或者调用用户线程注册的回调函数 阻塞和非阻塞(描述的是程序等待调用结果是的状态 - 调用者的状态) 1

从底层入手,图解 Java NIO BIO MIO AIO 四大IO模型与原理

目录 写在前面 1.1. Java IO读写原理 1.1.1. 内核缓冲与进程缓冲区 1.1.2. java IO读写的底层流程 1.2. 四种主要的IO模型 1.3. 同步阻塞IO(Blocking IO) 1.4. 同步非阻塞NIO(None Blocking IO) 1.5. IO多路复用模型(I/O multiplexing) 1.6. 异步IO模型(asynchronous IO) 小结一下: 写在最后 疯狂创客圈 百万级流量 高并发实战 疯狂创客圈 Java 分布式聊天室[ 亿级流量

【31】常见IO模型浅析 &middot; Qingfeng.Du

note:本文以及<说说Redis的非阻塞IO多路复用技术>都是NIO学习的预热,本文对常见的四种IO模型进行归纳总结. 常见的IO模型有: 同步阻塞IO(Blocking IO):即传统的IO模型 同步非阻塞IO(Non-blocking IO) IO多路复用(IO Multiplexing):即经典的Reactor设计模式,有时也称为异步阻塞IO 异步IO(Asynchronous IO):即经典的Proactor设计模式,也称为异步非阻塞IO 1 同步阻塞IO 简单,就不多说了. 2 同

[Z] linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO

原文链接:http://blog.csdn.net/colzer/article/details/8169075 IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作.那么我们对与外部设备的操作都可以看做对文件进行操作.我们对一个文件的读写,都通过调用内核提供的系统调用:内核给我们返回一个file descriptor(fd,文件描述符).而对一个socket的读写也会有相应的描述符,称为socketfd(socket描述符).描述符就是一个数字,指向内核中一个结构体(文件路径,数据

linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO(转载)

IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作.那么我们对与外部设备的操作都可以看做对文件进行操作.我们对一个文件的读写,都通过调用内核提供的系统调用:内核给我们返回一个file descriptor(fd,文件描述符).而对一个socket的读写也会有相应的描述符,称为socketfd(socket描述符).描述符就是一个数字,指向内核中一个结构体(文件路径,数据区,等一些属性).那么我们的应用程序对文件的读写就通过对描述符的读写完成. linux将内存分为内核区,用户区.l