简论BIO NIO AIO

简介: 简论BIO NIO AIO

IO的方式通常分为3种:同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO
一.  我们先来认识几个名词:
      (1) 同步:指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪。(只干这一件事)
      (2)异步:异步是指用户进程触发IO操作以后便可以开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知(这就是异步的特点,就是通知,比如你告诉你的好朋友去买一些零食,并且告诉他你喜欢吃甜的,酸的,托他去买,然后自己去干其他事情)。使用异步IO时,java会将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS。
       (3)阻塞:阻塞是指当试图对该文件描述符进行描述读写时,如果当时没有东西可读,或者暂时不可写,程序就进行等待状态,直到有东西可读或可写为止(比如你去商店买东西,售票员突然有事离开,这时我们就需要在这里等待,直到售票员回来)。
       (4)非阻塞:非阻塞状态下,如果没有东西可读,或者不可写,读写函数马上返回,而不会等待。(比如去银行取钱,你可以先领取一张小票,领取完后我们可以自己玩手机,聊天,当轮到我们时,银行会通知你,这个时候我们就可以去了)。
二.我们再理解一下组合方式的IO类型:
      (1)同步阻塞IO(java BIO):同步阻塞,服务器实现模式为一个接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。(只干这一件事,遇到阻塞一直等待)
       (2)同步非阻塞IO(java NIO):服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。用户进程也需要时不时的询问IO操作是否就绪,这就要求进程不停的去询问。(自己干,但是可以在等待时干其他事情)
       (3)异步阻塞IO(java NIO):此种方式下是指应用发起一个IO操作以后,不等待内核IO操作的完成,等内核完成IO操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问IO是否完成,那么为什么说是阻塞的呢?因此此时是通过select系统调用来完成的,而select函数本身的实现方法是阻塞的,而采用select函数有个好处就是它可以同时监听多个文件句柄(如果从UNP的角度看,select属于同步操作,因为select之后进程还需要读写数据),从而提高系统的并发性。(让别人干,同时等待的同时不能干其他事情)
      (4)异步非阻塞IO(java AIO):在此种模式下,用户进程只需要发起一个IO操作然后立刻返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的IO读写操作,因为真正的IO读写或者写入操作已经由内核完成了。(让别人干,等待的同时,可以干其他事情)。
     

相关文章
|
7月前
|
Java
BIO,NIO,AIO 有什么区别?
BIO,NIO,AIO 有什么区别? BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
33 0
|
4天前
|
移动开发 编解码 网络协议
用Java的BIO和NIO、Netty来实现HTTP服务器(三) 用Netty实现
用Java的BIO和NIO、Netty来实现HTTP服务器(三) 用Netty实现
|
4天前
|
网络协议 Java Linux
用Java来实现BIO和NIO模型的HTTP服务器(二) NIO的实现
用Java来实现BIO和NIO模型的HTTP服务器(二) NIO的实现
|
4天前
|
编解码 网络协议 Java
用Java的BIO和NIO、Netty实现HTTP服务器(一) BIO与绪论
用Java的BIO和NIO、Netty实现HTTP服务器(一) BIO与绪论
|
4天前
|
消息中间件 网络协议 Java
一文彻底理解BIO、NIO、AIO
一文彻底理解BIO、NIO、AIO
53 0
|
4天前
|
Java 应用服务中间件 Linux
java中的NIO,BIO,AIO
java中的NIO,BIO,AIO
19 0
|
4天前
|
数据采集 Java 调度
大牛用6000字带你搞懂实时流计算系统的数据采集之BIO与NIO!
数据采集 从本章开始,我们将逐一讨论实时流计算系统各方面的内容。 为了更加方便和清楚地阐述问题,本文将以互联网金融风控为场景,构建一个实时流计算风控系统。 虽然是以互联网金融风控为场景,但大多数情形下实时流计算系统在架构上是大同小异的,或者具有异曲同工之妙。
|
7月前
|
缓存 网络协议 前端开发
从BIO到NIO在到Netty线程模型详解
从BIO到NIO在到Netty线程模型详解
141 1
|
4天前
|
存储 Java 数据处理
|
4天前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同