概念

  • Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。

  • 在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。

所谓同步/异步,关注的是能不能同时开工。

所谓阻塞/非阻塞,关注的是能不能动。

通过推理进行组合:

  • 同步阻塞,不能同时开工,也不能动。只有一条小道,一次只能过一辆车,可悲的是还TMD的堵上了。

  • 同步非阻塞,不能同时开工,但可以动。只有一条小道,一次只能过一辆车,幸运的是可以正常通行。

  • 异步阻塞,可以同时开工,但不可以动。有多条路,每条路都可以跑车,可气的是全都TMD的堵上了。

  • 异步非阻塞,可以工时开工,也可以动。有多条路,每条路都可以跑车,很爽的是全都可以正常通行。

回到程序里,把它们和线程关联起来:

  • 同步阻塞,相当于一个线程在等待。

  • 同步非阻塞,相当于一个线程在正常运行。

  • 异步阻塞,相当于多个线程都在等待。

  • 异步非阻塞,相当于多个线程都在正常运行。

总结

  • 举个生活中简单的例子,你妈妈让你烧水,小时候你比较笨啊,在那里傻等着水开(同步阻塞)。等你稍微再长大一点,你知道每次烧水的空隙可以去干点其他事,然后只需要时不时来看看水开了没有(同步非阻塞)。后来,你们家用上了水开了会发出声音的壶,这样你就只需要听到响声(事件通知)后就知道水开了,在这期间你可以随便干自己的事情,你需要去倒水了(异步非阻塞)。

参考