BIO,NIO,AIO的区别

首先,什么是io模型。模型即是解决一个问题的固定套路,io即是输入与输出,那么io模型就是解决输入与输出问题的一种固定套路。其次为什么要学习io模型,因为在输入与输出的过程通常很久,而在等待输入的过程中,cpu处于闲置状态,就造成了资源浪费,所以学习io模型,就是为了利用cpu在等待过程中做别的事。注意,IO其实有很多类型,例如 socket网络IO,内存到内存的copy,等待键盘输入,对比起来socket网络IO需要等待的时间是最长的,这也是咱们重点关注的地方

关于阻塞与非阻塞:io模型分为阻塞io,非阻塞io,以及多路复用io模型,异步io模型。

阻塞io模型:tcp程序就是阻塞io模型。没有数据到达或数据还没有准备好时,进程就会阻塞自己,让出cpu执行权,这就是阻塞io模型提高cpu利用率的方式。直到数据到达,会唤醒该进程。

非阻塞io模型:顾名思义,它就是与阻塞io相反。该模型在数据没有到达时,就会抛出异常,然后我们捕获异常,让他不断的轮询系统数据是否到达。这种模型会占用cpu做一些无效循环,效率低于阻塞io模型。

多路复用io模型:该模型属于事件驱动模型。多路复用即是将多个io流都交给一个进程处理。对比阻塞或非阻塞模型增加了一个select来帮我们检测io流的状态,从而避免了我们自己检测socket带来的开销,select会把已经就绪的放入列表中,我们需要遍历列表,分别处理读写即可。多路复用对比非阻塞,多路复用可以极大降低降低了CPU的占用率。

异步IO模型:异步IO是发起任务后就可以继续执行其他任务,当数据已经拷贝到应程序缓冲区,才会给你的线程发送信号,或者执行回调。

注意:多路复用并不完美,因为本质上多个任务之间是串行的,如果某个任务耗时较长将导致其他任务不能立即执行,所以多路复用最大的优势就是高并发

关于同步与异步:我们建立网络连接的时候,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信。在网络通信过程中,同步与异步指的是通信的模式。同步机制,是指发送方发送请求后,需要等待接收到接收方发回的响应后,才接着发送下一个请求;异步机制,和同步机制正好相反,在异步机制中,发送方发出一个请求后,不等待接收响应这个请求,就继续发送下个请求。

BIO:同步阻塞,服务器实现模式为一个连接一个线程。何谓一个连接,就是客户端发起一个连接请求,服务器就建立一个线程进行处理

NIO:同步非阻塞,服务器实现模式为一个请求一个线程。何谓一个请求,就是一个连接发起了一个请求。即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

AIO:异步非阻塞,服务器实现模式为一个有效请求一个线程。何谓一个有效请求,就是前面提到的异步io模型说的,数据准备好了之后在通知服务器应用程序启动线程处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值