BIO、NIO、AIO区别
在了解它们的区别之前,我们首先先要了解以下几点概念:
- 阻塞:进行读写操作时,没有东西可读可写时,程序就进入等待的状态,直到可读或可写为止。(简单的理解就是一根筋,必须要等这件事做完才去做其他的事情,否则一直处于等待的状态。)
- 非阻塞:进行读写操作时,没有东西可读可写时,Java调用会马上返回 ,程序不会等待。(你先排上号,先去干其他的事情,当叫到你的时候,你再去干这个事情)。
- 同步:当触发IO操作的时候,java自己处理IO的读写操作。(自己亲自出马去干的一些事情)
- 异步:Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS,OS需要支持异步IO操作API 。(指示别人帮自己做一些事情,你可以先干些别的,做完了并通知自己一声)
BIO、NIO、AIO三者的区别
- BIO:同步并阻塞,服务器启动一个连接一个线程,适用于并发量要求不高的场景。(当你5岁时,做事还不懂的变通,你妈妈让你去烧两壶水,你那时还比较单纯(一根筋),你就先坐一壶水,就在这一直等着,也不敢动,烧开一壶,再去烧下一壶)
- NIO:同步非阻塞,服务器实现模式为一个请求一个线程,适用于高并发量要求的场景 。(当你长大一点了8岁的时候,学了一点知识聪明了的时候,你妈妈又让你去烧两壶水,你就会把两壶水都坐上,哪壶水烧开了,你就去处理哪壶水)
- AIO:异步非阻塞 ,服务器实现模式为一个有效请求一个线程 ,技术不算成熟,应用场景不算多。(当你12岁的时候,你妈妈让你烧两壶水,你和你妈妈提意见要买一个烧开水自动提示的水壶,然后你把两壶水坐上之后,自己打游戏去了,烧开水之后,水壶提示你水开了需要去处理了)