BIO、NIO、AIO的区别

本文详细解析了BIO(同步阻塞IO)、NIO(同步非阻塞IO)及AIO(异步非阻塞IO)三种网络编程模型的工作原理与区别。从BIO的传统模式入手,逐步介绍了伪异步BIO、NIO的选择器机制直至AIO的完全异步操作。针对每种模型的特点与应用场景进行了深入探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BIO、NIO、AIO的区别

    一、BIO(同步阻塞IO)

    网络编程的模型其实就是C/S模型,即两个进程间的通信。BIO编程则提供最传统的一种IO网络编程方式,优点是API使用简单,易于理解。

    BIO的模型是让服务器端提供一个端口号,新建一个ServerSocket套接字对象,客户端可以通过URL和端口号与服务器建立TCP连接,服务器端和客户端通过套接字来通信,在该模型中需要服务器端有一个线程持续监听端口是否有客户端发起连接请求,当有客户端接入时,新建一个Socket对象,然后新建一个线程处理该对象,用该对象的IO流进行通信,若IO操作为结束,线程便会阻塞着。

    二、伪异步BIO

    前一种方法如果网络时延较长,会一直阻塞线程,倘若客户端连接数过多,线程会不断增加,导致系统挂掉。伪异步的方法,使用线程池来控制处理套接字的线程数量,使得线程复用,但是本质上还是一个线程处理一个连接。

    三、NIO(同步非阻塞IO)    

    NIO的模型,会在服务器端新建一个ServerSocketChanel对象,将其设置为非阻塞,注册于Selector选择器对象中,然后轮询选择器中注册的Chanel,判断Chanel的状态,对已经完成读写的SocketChanel对象,和已经完成连接的ServerSocketChanel对象进行处理,Chanel都是对Buffer对象进行读写操作,是双向的。NIO相当于对读写操作进行了异步处理,做到只需要轮询选择器获取结果,而不需要新建线程阻塞着等待IO的处理过程。

    四、AIO(异步非阻塞IO)

    AIO,同样也是基于通道实现IO操作,不同的是,他取消了选择器的使用,服务器端新建一个异步套接字通道对象,调用accept方法即可发出一个异步的方法,该方法存在有两个回调函数,在回调函数中,我们可以处理当新建连接操作完成时,需要处理的方案,不仅仅是接受连接为异步方法,包括读和写在内,都是一个异步的过程,在操作系统层面实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值