BIO/NIO/AIO/Netty

BIO:同步阻塞式IO,服务器端与客户端通过三次握手后建立连接,连接成功后,双方通过I/O进行同步阻塞式通信。弊端:1.读和写操作是同步阻塞的,任何一端出现网络性能问题,都会影响另一方。2.一个链路建立一个线程,无法满足高并发,高性能要求。

PIO(伪异步IO):为了解决同步阻塞式IO一个链路建立一个线程的弊端,出现了伪异步IO,伪异步IO其实就是通过线程池/队列来处理对个客户端的接入,通过线程池可以灵活的调配线程资源,设置线程最大值,防止海量并发接入导致线程耗尽。弊端:读和写操作是同步阻塞的,任何一端出现网络性能问题,都会影响另一方。

NIO(非阻塞式IO):NIO式jdk1.4中引入的,它弥补了同步阻塞IO的不足,他在JAVA提供了高速的,面向块的IO。同步阻塞IO是以流的方式处理数据,而NIO是以块的方式处理数据,面向缓冲区。介绍一下NIO解决BIO的问题

AIO(异步非阻塞IO):也叫做NIO2.0.异步非阻塞I/O,NIO2的异步套接字通道时真正的异步非阻塞I/O,它对应unix网络驱动中的事件驱动I/O,它不需要通过多路复用器对注册的通道进行轮询操作即可实现异步读写,简化了NIO编程模型。

1.首先,传统阻塞式IO,每个连接必须要开一个线程来处理,并且没有处理完线程不退出。在连接数不多的情况下,传统IO编写容易使用。但是随着连接数的增多,问题传统的IO就不行了。因为,传统IO处理每个连接都要消耗一个线程,而程序的效率当线程数不多时是随着线程数增加而增加的,但是到一定数量之后,是随着线程数的增加而减少的。

2.非阻塞式IO,由于基于观察者模式,用于事件多路分离和分派的体系结构模式,所以可以利用线程池来处理。事件来了就处理,处理完了就把线程归还。当某个连接发送请求到服务器,服务器把这个连接请求当做一个请求“事件”,并把这个事件非配给相应函数处理。这样一个线程就可以异步处理多个事件。而阻塞式IO的线程的大部分时间都浪费在等待请求上了。

你可能感兴趣的:(BIO/NIO/AIO/Netty)