为什么说BIO是同步阻塞的?
- 同步阻塞针对的是磁盘文件读写IO操作来说的,不是针对网络模型而言。
- 因为用BIO的流读写文件,例如FileInputStream,是说你发起个IO请求直接hang死,卡在那里,必须等着搞完这次IO才能返回。
为什么说NIO是同步非阻塞的?
- 因为无论多少客户端都可以接入服务端,客户端接入并不会耗费一个线程,只会创建一个连接然后注册到selector上去,这样你就可以去干其他你想干的其他事情了。
- 一个selector线程不断的轮训所有的socket连接,发现有事件了就通知你,然后你就启动一个线程处理一个请求即可,这个过程就是非阻塞的。
- 但是这个处理过程中,你还是要先读取数据,处理,再返回,这是同步的过程。
为什么说AIO是异步非阻塞的?
- 通过AIO发起个文件IO操作之后,你立马就返回可以干别的事了,接下来你也不用管,操作系统自己干完了IO之后,告诉你说ok了。
- 当你基于AIO的api去读写文件时,当你发起一个请求之后,剩下的事情就是交给操作系统了。
- 当读写完成后,操作系统会回调你的接口,告诉你操作完成
- 在这期间不需要等待,也不需要去轮训判断操作系统完成的状态,你可以去干其他事情。
- 同步就是自己主动还得去轮训操作系统,异步就是操作系统反过来通知你。所以说AIO就是异步非阻塞的。
网友评论