简论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读写或者写入操作已经由内核完成了。(让别人干,等待的同时,可以干其他事情)。
     

相关文章
|
2月前
|
网络协议 Dubbo Java
一文搞懂NIO、AIO、BIO的核心区别(建议收藏)
本文详细解析了NIO、AIO、BIO的核心区别,NIO的三个核心概念,以及NIO在Java框架中的应用等。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文搞懂NIO、AIO、BIO的核心区别(建议收藏)
|
2月前
|
Java
BIO、NIO、AIO 有什么区别
BIO(阻塞I/O)模型中,服务器实现模式为一个连接一个线程;NIO(非阻塞I/O)使用单线程或少量线程处理多个请求;AIO(异步I/O)则是在NIO基础上进一步优化,采用事件通知机制,提高并发处理能力。
63 5
|
2月前
|
消息中间件 监控 Java
BIO、NIO、AIO在不同场景下的应用对比
BIO(阻塞I/O)、NIO(非阻塞I/O)和AIO(异步I/O)是Java中处理I/O操作的三种模式。BIO适用于连接数少且稳定的场景;NIO通过非阻塞模式提高并发处理能力,适合高并发场景;AIO则完全异步,适合需要高效、低延迟的I/O操作场景。
117 4
|
4月前
|
Java
Netty BIO/NIO/AIO介绍
Netty BIO/NIO/AIO介绍
|
3月前
|
Java Linux 应用服务中间件
【编程进阶知识】高并发场景下Bio与Nio的比较及原理示意图
本文介绍了在Linux系统上使用Tomcat部署Java应用程序时,BIO(阻塞I/O)和NIO(非阻塞I/O)在网络编程中的实现和性能差异。BIO采用传统的线程模型,每个连接请求都会创建一个新线程进行处理,导致在高并发场景下存在严重的性能瓶颈,如阻塞等待和线程创建开销大等问题。而NIO则通过事件驱动机制,利用事件注册、事件轮询器和事件通知,实现了更高效的连接管理和数据传输,避免了阻塞和多级数据复制,显著提升了系统的并发处理能力。
80 0
|
5月前
|
Java
"揭秘Java IO三大模式:BIO、NIO、AIO背后的秘密!为何AIO成为高并发时代的宠儿,你的选择对了吗?"
【8月更文挑战第19天】在Java的IO编程中,BIO、NIO与AIO代表了三种不同的IO处理机制。BIO采用同步阻塞模型,每个连接需单独线程处理,适用于连接少且稳定的场景。NIO引入了非阻塞性质,利用Channel、Buffer与Selector实现多路复用,提升了效率与吞吐量。AIO则是真正的异步IO,在JDK 7中引入,通过回调或Future机制在IO操作完成后通知应用,适合高并发场景。选择合适的模型对构建高效网络应用至关重要。
102 2
|
6月前
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
6月前
|
Java
Java中的NIO编程详解
Java中的NIO编程详解
|
6月前
|
Java 大数据
如何在Java中进行网络编程:Socket与NIO
如何在Java中进行网络编程:Socket与NIO
|
6月前
|
Java
Java中的NIO编程详解
Java中的NIO编程详解