BIO和NIO的区别是什么?两者有什么区别?

KLQ 2020-07-01 09:57:25 java常见问答 7419

下面要给大家讲到的就是BIO和NIO相关的内容,主要就是介绍这两者的区别,你知道他们之间的区别都是什么吗?下面一起来详细的了解一下吧!

1、BIO

首先我们来介绍一下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事件。

好啦,关于BIO和NIO的区别以及他们各自的简单介绍就给你介绍到这里了,希望可以帮助到你。

你想了解更多的java从入门到精通知识吗?可以继续通过奇Q工具网来进行了解哦。

推荐阅读:

为什么Redis单线程快?原因是什么?

线程池大小设置多少合适?java如何合理设置线程池大小?

java线程池拒绝策略有哪些?