IO模型介绍

  • java IO模型
  • BIO(Blocking IO)
    • 缺点:
    • 应用场景:
  • NIO(Non Blocking IO)
    • 应用场景:
  • AIO(NIO 2.0)
  • BIO、 NIO、 AIO 对比

java IO模型

IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式:BIO,NIO,AIO

BIO(Blocking IO)

同步阻塞模型,一个客户端连接对应一个处理线程

缺点:

1、IO代码里read操作是阻塞操作,如果连接不做数据读写操作会导致线程阻塞,浪费资源 2、如果线程很多,会导致服务器线程太多,压力太大。

应用场景:

BIO 方式适用于连接数目比较小且固定的架构, 这种方式对服务器资源要求比较高, 但程序简单易理解。

NIO(Non Blocking IO)

同步非阻塞,服务器实现模式为一个线程可以处理多个请求(连接),客户端发送的连接请求都会注册到多路复用器selector上,多路复用 器轮询到连接有IO请求就进行处理。
I/O多路复用底层一般用的Linux API(select,poll,epoll)来实现,他们的区别如下表:

应用场景:

NIO方式适用于连接数目多且连接比较短(轻操作) 的架构, 比如聊天服务器, 弹幕系统, 服务器间通讯,编程比较复杂, JDK1.4 开 始支持
NIO 有三大核心组件: Channel(通道), Buffer(缓冲区),Selector(选择器)

  1. channel 类似于流,每个 channel 对应一个 buffer缓冲区,buffer 底层就是个数组
  2. channel 会注册到 selector 上,由 selector 根据 channel 读写事件的发生将其交由某个空闲的线程处理
  3. selector 可以对应一个或多个线程
  4. NIO 的 Buffer 和 channel 都是既可以读也可以写

AIO(NIO 2.0)

异步非阻塞, 由操作系统完成后回调通知服务端程序启动线程去处理, 一般适用于连接数较多且连接时间较长的应用 应用场景:
AIO方式适用于连接数目多且连接比较长(重操作) 的架构,JDK7 开始支持

BIO、 NIO、 AIO 对比

java IO模型详解相关推荐

  1. java IO编程详解

    java IO编程详解 一.Socket 1. Sock概述 Socket,套接字就是两台主机之间逻辑连接的端点.TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP协议是应用层协议 ...

  2. java io流详解_一文带你看懂JAVA IO流,史上最全面的IO教学啦

    一.IO流是什么 惯例引用百科的回答流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操作 ...

  3. 网络套接字编程之IO模型详解

    网络套接字编程之IO模型详解 本文主要参考自<UNIX网络编程>(第1卷)(套接口API第3版) Unix下可用的五种I/O模型有: 阻塞式I/O 非阻塞式I/O I/O复用(select ...

  4. Java中五中IO模型详解

    一.前言 在<Unix网络编程>一书中提到了五种IO模型,5种IO模型分别为: 阻塞IO模型.非阻塞IO模型.IO复用模型.信号驱动的IO模型.异步IO模型.下面就分别来介绍一下这5种IO ...

  5. 看一遍就理解:IO模型详解

    前言 大家好,我是程序员田螺.今天我们一起来学习IO模型.在本文开始前呢,先问问大家几个问题哈~ 什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll跟 ...

  6. Java 内存模型详解

    概述 Java的内存模型(Java Memory Model )简称JMM.首先应该明白,Java内存模型是一个规范,主要规定了以下两点: 规定了一个线程如何以及何时可以看到其他线程修改过后的共享变量 ...

  7. Java IO用法详解

    一.java io 概述 1.1 相关概念 Java IO Java IO即Java 输入输出系统.不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这 ...

  8. Java 基础——Java 三层模型 详解

    - 一.简介 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer).业务逻辑层(Business Log ...

  9. Java IO最详解

    初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见 ...

  10. linux select read阻塞_linux下的IO模型详解

    开门见山,Linux下的如中IO模型:阻塞IO模型,非阻塞IO模型,IO复用模型,信号驱动IO模型,异步IO模型,见下图 接下来一一讲解这5种模型 阻塞型IO:最简单的一种IO模型,简单理解就是死等, ...

最新文章

  1. 2021年春季学期-信号与系统-第二次作业参考答案-第十小题
  2. 基本数据结构和算法回顾
  3. 骄傲的代价_JAVA
  4. Selector SelectionKey
  5. MySQL列转行sql语句
  6. 浅谈:数据结构之双链表结构与代码模拟双链表的实现
  7. QT 提示之右下角冒泡
  8. python报错cannot import name ‘BeautifulSoup‘ from ‘bs4‘
  9. 为什么面试总喜欢考算法题?
  10. Windows Server 2016-DHCP服务器审核日志大小调整
  11. 1.Windows下 PHP 开源框架 laravel 的搭建
  12. android工厂测试开发,Android开机启动工程测试APK功能开发
  13. AE-after Effects 笔记
  14. H5 HTML 移动端触摸拖拽drag drop 自定义拖拽样式 使用PointerEvent模拟的拖拽方案
  15. “快播时代”终结:清内容、关服务器!
  16. 在python中输入圆的半_python半圆
  17. 【视频教程】帝国CMS制作网站系列教程08—单页模板的制作
  18. 如何基于EasyCVR视频技术实现智慧移动执法?
  19. Latex 各种处理论文操作-插图、插表格
  20. Jupyter Lab 十大高生产力插件

热门文章

  1. 卫星地图破坏男女恋人之间的关系
  2. 【STM32F407的DSP教程】第2章 Matlab R2018a的安装
  3. fw325r没有虚拟服务器,迅捷fw325r路由器设置完没有网怎么办?
  4. 锐捷交换机常用命令速查
  5. 数据分析中会常犯哪些错误,如何解决? 四
  6. PcShare,PcClient 后门手工解决方案
  7. Ubuntu下自制douban.fm播放器
  8. 一些j2ee的视频资料
  9. mingw64镜像网站
  10. VMware 运行出现“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”解决方案