I/O模型简介之BIO、NIO、AIO

I/O模型简介之BIO、NIO、AIO

  • 1、I/O模型
    • 1.1、BIO
    • 1.2、NIO
    • 1.3、AIO
  • 2、BIO、NIO、AIO适用场景分析
  • 3、BIO和NIO的区别(AIO是NIO的升级版)

1、I/O模型

I/O模型:就是用什么样的通道或者说是通信模式和架构进行数据的传输和接收,很大程度上决定了程序通信的性能,Java共支持3种网络编程的/IO模型:BIO、NIO、AIO
实际通信需求下,要根据不同的业务场景和性能需求决定选择不同的I/O模型

1.1、BIO

  BIO也叫同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程成对存在,每有一个连接请求,服务器就要创建一个线程。即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。
I/O模型简介之BIO、NIO、AIO_第1张图片

1.2、NIO

  NIO:同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求就进行处理,当一个通道没有数据的时候,服务器就无需在该通道浪费线程开销
I/O模型简介之BIO、NIO、AIO_第2张图片

1.3、AIO

  AlO(NI0.2):异步异步非阻塞服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,一般适用于连接数较多且连接时间较长的应用

2、BIO、NIO、AIO适用场景分析

  • BlO方式适用于连接数目比较小且固定的架构(因为他要为每一个连接创建一个线程),这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序简单易理解。
  • NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,弹幕系统,服务器间通讯等。编程比较复杂,JDK1.4开始支持。
  • AlO方式使用于连接数目多且连接比较长〈重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

3、BIO和NIO的区别(AIO是NIO的升级版)

  • BIO主要是以I/O流的形式处理数据;NIO以I/O块(buffer)的形式处理数据,效率:块>流

  • BIO是阻塞的,NIO是非阻塞的

  • BIO主要是以字节流和字符流操作,NIO是基于channel(通道)、buffer(缓冲区)操作的;selector(选择器)是用来监听channel的

  • BIO是单向的,要么是输入流要么是输出流,NIO是双向的,可以从channel往buffer读写数据,同时buffer也可以向channel读写数据

你可能感兴趣的:(IO流,多线程,nio,服务器,网络)