Netty剖析之IO

什么是IO?

  • 所谓IO即inputoutput的缩写,是对数据流入和流出的抽象概念
  • IO简单的理解就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能;
  • Java总共支持三种网络编程IO模型:BIO(同步阻塞)、NIO(同步非阻塞)、AIO(异步非阻塞)

BIO介绍

BIO(blocking I/O),同步阻塞IO,服务器实现模式为一个线程处理一个连接,即每当有一个客户端连接时,就会启动一个独立的线程来进行处理,如果这个连接不做任何事情,就会阻塞到那里,从而引起不必要的线程开销;

示意图:
在这里插入图片描述

NIO介绍

NIO(non blocking IO),同步非阻塞IO,服务器实现模式为一个线程处理多个连接,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有IO请求就进行处理;

示意图:
在这里插入图片描述

AIO介绍

AIO(Asynchronous IO),异步非阻塞IO,引入异步通道的概念,采用了Proactor模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多,且连接时间较长的应用;

BIO、NIO、AIO应用场景

  1. BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,程序简单易理解;

  2. NIO方式适用于连接数目较多且连接比较短(轻操作)的架构,比如聊天服务,弹幕服务,服务间通讯等,编程较为复杂,JDK1.4开始支持;

  3. AIO方式适用于连接数据多且连接比较长(重操作) 的架构,比如图片服务,高并发操作,编程比较复杂,JDK1.7开始支持;

发布了107 篇原创文章 · 获赞 19 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/chen_changying/article/details/104116647