nio和 bio 的区别是啥?

2020-09-01 20:15发布

6条回答
汽水味的小盆友
2021-11-08 15:18

1、BIO

同步阻塞式IO,服务器实现模式是一个连接建立一个线程。

也就是说,在客户端有连接请求的时候,服务器端就需要启动一个线程进行处理。

假如,这个连接不做任何事情,就会导致一些不必要的开销,可以通过线程池机制来进行改善。

下面简单的详解一下BIO的原理。

单线程:

同步阻塞式IO在while循环中服务端会调用accept方法等待接收客户端的连接请求。

只要接收到一个连接请求,那么,就能够建立通信套接字。

在这个通信套接字上进行读写操作,这个时候,不能够接收其他客户端的连接请求,指能够等待同当前连接的客户端的操作执行完成。

假如,BIO要能够同时的对多个客户端的要求进行处理,那么就必须去使用多线程。

也就是说,每一次,accept阻塞等待来自客户端请求,只要受到连接请求就建立通信套接字,与此同时,开启一个新的线程来出炉这个套接字的数据读写请求,之后,就立马继续accept等待其他客户端连接请求,也就是为每个客户端请求都单独创建一个线程来单独处理。


2、NIO

同步非阻塞式IO,服务器实现模式是一个请求一个线程。

也就是说,客户端发送的连接请求,全部都会注册到多路复用器上面。

多路复用器论询到连接有IO请求的时候,才启动一个线程进行处理。

同步阻塞式IO关键采用了事件驱动的思想来实现一个多路转换器。

下面来讲一下NIO的原理。

主要从下面的三大点来介绍:

(1)同时监听

监听多个客户端的连接请求以及接收数据请求的同时,还可以监听自己有数据发送。

(2)建立连接

假如,服务端监听到客户端到连接请求,就给他建立通信套接字,这里要注意一下了,在java当中,就是通道,之后,再返回继续监听。

假如,同一时间有多个客户端连接请求到来也可以全部接收,依次给他们建立通信套接字。

(3)处理数据

假如,服务端监听到来自自己已经创建了通信套接字到客户端发来的数据,那么,就会调用对应的接口处理接收到的数据。

假如,同时有多个客户端发来数据,也可以依次进行处理。

3、BIO和NIO的区别

其实BIO和NIO他们两个之间,最大的区别就是只要开启一个线程就能够处理来自多个客户端的IO事件。

一周热门 更多>