superleeyom / blog

:bookmark: 个人博客仓库,用于记录一些幼稚的想法和脑残的瞬间,欢迎 star、watch,该仓库为个人博客,请不要提 issue ,该仓库后端参考了 @yihong0618 的 gitblog 项目,前端参考了@LoeiFy 的 Mirror 项目,感谢!

Home Page:https://blog.leeyom.top

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

白话解说之 BIO、NIO、AIO、异步阻塞的区别

superleeyom opened this issue · comments

白话解说

首先明白这个几个简称的含义:

  • BIO(Blocking IO):同步阻塞
  • NIO(Non-Blocking IO):同步非阻塞
  • AIO(Asynchronous IO):异步非阻塞

BIO、NIO、异步阻塞、AIO 这四者之间有啥区别呢?那就拿生活的实例来解释一下:

  • BIO:我去上厕所,这个时候坑位都满了,我必须等待坑位释放了,我才能上吧?!此时我啥都不干,站在厕所里盯着,过了一会有人出来了,我就赶紧蹲上去。
  • NIO:我去上厕所,这个时候坑位都满了,没关系,哥不急,我出去抽根烟,过会回来看看有没有空位,如果有我就蹲,如果没有我出去接着抽烟或者玩会手机。
  • 异步阻塞:我去上厕所,这个时候坑位都满了,没事我等着,等有了新的空位,让他通知我就行,通知了我,我就蹲上去。
  • AIO:我去上厕所,这个时候坑位都满了,没事,我一点也不急,我去厕所外面抽根烟再玩玩手机,等有新的坑位释放了,会有人通知我的,通知我了,我就蹲上去。

从这个生活实例中能可以看得出来:

  • 同步就是我需要自己每隔一段时间,以轮训的方式去看看有没有空的坑位;
  • 异步则是有人拉完茅坑会通知你,通知你后,你再回去蹲;
  • 阻塞就是你在等待的过程中,你不去做任何的事情,就干等着;
  • 非阻塞就是你在等待的过程中,可以去做其他的事情,比如抽烟、玩手机等;

总结就是:异步的优势显而易见,大大优化用户体验, 非阻塞使得系统资源开销远远小于阻塞模式,因为系统不需要创建新的进程(或线程),大大地节省了系统资源。

专业解说

发现一篇解说的很清楚的文章:《常见的IO模型有哪些?Java中的BIO、NIO、AIO 有啥区别?》