下面要给大家讲到的就是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工具网来进行了解哦。
推荐阅读: