白话解说之 BIO、NIO、AIO、异步阻塞的区别
superleeyom opened this issue · 0 comments
superleeyom commented
白话解说
首先明白这个几个简称的含义:
- BIO(Blocking IO):同步阻塞
- NIO(Non-Blocking IO):同步非阻塞
- AIO(Asynchronous IO):异步非阻塞
BIO、NIO、异步阻塞、AIO 这四者之间有啥区别呢?那就拿生活的实例来解释一下:
- BIO:我去上厕所,这个时候坑位都满了,我必须等待坑位释放了,我才能上吧?!此时我啥都不干,站在厕所里盯着,过了一会有人出来了,我就赶紧蹲上去。
- NIO:我去上厕所,这个时候坑位都满了,没关系,哥不急,我出去抽根烟,过会回来看看有没有空位,如果有我就蹲,如果没有我出去接着抽烟或者玩会手机。
- 异步阻塞:我去上厕所,这个时候坑位都满了,没事我等着,等有了新的空位,让他通知我就行,通知了我,我就蹲上去。
- AIO:我去上厕所,这个时候坑位都满了,没事,我一点也不急,我去厕所外面抽根烟再玩玩手机,等有新的坑位释放了,会有人通知我的,通知我了,我就蹲上去。
从这个生活实例中能可以看得出来:
同步
就是我需要自己每隔一段时间,以轮训的方式去看看有没有空的坑位;异步
则是有人拉完茅坑会通知你,通知你后,你再回去蹲;阻塞
就是你在等待的过程中,你不去做任何的事情,就干等着;非阻塞
就是你在等待的过程中,可以去做其他的事情,比如抽烟、玩手机等;
总结就是:异步的优势显而易见,大大优化用户体验, 非阻塞使得系统资源开销远远小于阻塞模式,因为系统不需要创建新的进程(或线程),大大地节省了系统资源。
专业解说
发现一篇解说的很清楚的文章:《常见的IO模型有哪些?Java中的BIO、NIO、AIO 有啥区别?》