BIO、NIO、AIO 有什么区别?

转载:https://blog.csdn.net/haogexiaole/article/details/86499782

BIO、NIO、AIO 的区别

在看BIO、NIO、AIO的区别之前,需要弄明白同步和异步以及阻塞和非阻塞。

同步和异步

同步是指发送一个请求,然后等待请求返回才能发送下一个请求,任务必须等待然后一个一个做。
异步是指发送一个请求,触发了IO之后,可以去发送下一个请求,任务无需等待,发送完请求可以做其他事了。

阻塞和非阻塞

阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞:非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

BIO 同步阻塞I/O

BIO在工作时,当一个任务完成之后再去做另外一件任务,但是当系统需要同时完成很多任务的时候,就需要系统创建很多线程来完成对应的工作,因为BIO模型下一个线程同时只能做一个工作,如果线程在执行过程中依赖于需要等待的资源,那么该线程会长期处于阻塞状态,在cpu的不断切换中,会大大降低执行效率

NIO同步非阻塞I/O

在BIO模型中,如果需要并发处理多个I/O请求,那就需要多线程来支持,NIO使用了多路复用器机制,以socket使用来说,多路复用器通过不断轮询各个连接的状态,只有在socket有流可读或者可写时,应用程序才需要去处理它,在线程的使用上,就不需要一个连接就必须使用一个处理线程了,而是只是有效请求时(确实需要进行I/O处理时),才会使用一个线程去处理,这样就避免了BIO模型下大量线程处于阻塞等待状态。

AIO 异步非阻塞I/O

从编程模式上来看AIO相对于NIO的区别在于,NIO需要使用者线程不停的轮询IO对象,来确定是否有数据准备好可以读了,而AIO则是在数据准备好之后,才会通知数据使用者,这样使用者就不需要不停地轮询了。

BIO是一个连接一个线程。

NIO是一个请求一个线程。

AIO是一个有效请求一个线程。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章