JAVA 004 网络编程 BIO NIO AIO

Posted hpzhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 004 网络编程 BIO NIO AIO相关的知识,希望对你有一定的参考价值。

目录(图片来自于网络)

  多路复用Linux环境下底层机制

  多路复用模式Reacotor和Proactor

  BIO,NIO,AIO的简单介绍

 

多路复用Linux环境下底层机制 

技术分享图片

 

多路复用模式Reacotor和Proactor

Reactor和Proactor模式的主要区别就是真正的读取和写入操作是由谁来完成的

Reactor中需要应用程序自己读取或者写入数据

Proactor模式,应用程序不需要进行实际的读写过程,它只需要从缓存区读取或者写入即可,操作系统会读取缓存区或者写入缓存区到真正的IO的设备

Reactor(反应器模式)

  说明你可以进行读写操作了,关注的是IO操作的就绪事件(采用同步IO)

Proactor

  说明已经完成完成读写操作了,具体内存在给定缓存区中,可以对这些内容进行其它操作了,关注的是IO操作的完成事件(采用异步IO)

 

BIO,NIO,AIO的基本介绍

BIO -> 多线程 -> 线程池 -> NIO -> AIO

BIO基于字节流和字符流进行操作(每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存到任何地方)

NIO基于Channel(通道)和Buffer(缓冲)进行操作,数据总是从通道读取到缓冲区,或者从缓冲区写入到通道中,Selector用于监听多个通道的事件(连接打开,数据到达)

基本对比(涉及到连接数和线程数的概念,以及线程分配模型)

  BIO 同步阻塞式IO 一个线程处理一个连接,发起和处理IO都是同步的

  NIO 同步非阻塞IO 一个线程处理多个连接,发起IO请求是非阻塞的但处理IO请求是同步

  AIO 异步非阻塞IO 一个有效请求一个线程,发起和处理IO请求都是异步的

各自的适应场景

  BIO 连接数量小,连接时间段,计算密集

  NIO 连接数目多且连接比较短(轻操作)的架构

  AIO 连接数目多且连接比较长(重操作)的架构

 

以上是关于JAVA 004 网络编程 BIO NIO AIO的主要内容,如果未能解决你的问题,请参考以下文章

一站式学习Java网络编程 全面理解BIO/NIO/AIO完整版

JAVA 中BIO,NIO,AIO的理解

一站式学习Java网络编程 全面理解BIO/NIO/AIO

BIO | NIO | AIO (Java版)

java中的NIO,BIO,AIO

java中的NIO,BIO,AIO