【原创】java-NIO(一)阻塞IO与非阻塞IO--转载请注明出处

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/qq_35427785/article/details/81841365

零、一个小故事

在讲解阻塞IO与非阻塞IO之前,先举出一个小小的例子:

       一个老板经营一个饭店,最初的时候,每来一个客人安排一个服务员招呼,客人很满意。

  后来客人越来越多,需要的服务员越来越多,但是餐厅的后厨已经挤满了服务员,不能请更多的服务员了,之前的经营模式已经不能满足需求。老板之所以是老板,自然有自己的过人之处,老板发现,服务员在为客人服务时,当客人点菜的时候,服务员基本处于等待状态,不会做任何事情。

  于是乎就让服务员在客人点菜的时候,去为其他客人服务,当服务员有空闲时,每隔一段时间询问一次客人,菜是否已经点好了,此时再对客人进行下单服务。在经历了这种改革以后,便能在有限的服务员数量前提下,为更多的客人提供服务了。

一、阻塞IO与非阻塞IO

在上面的饭店的故事中,每一个服务员等待客人点单,就是一个阻塞IO的例子,而在客人挑选好菜品,下单时再招呼服务员前来服务,就是非阻塞IO的例子。

下面的图6.1中,即是阻塞IO的模型,在进行阻塞IO的操作时,应用调用系统本身的内核,来处理数据,但是此时数据是未处理完成的,也就是上面所说的等待用户点菜,等到用户点菜完成后,再进行下单时,应用才会继续执行后续操作。

在下方的图,则是非阻塞IO的模型,在进行非阻塞IO的操作时,应用在调用系统内核来处理数据时,无论是否已经将数据准备完成,都会给予调用方一个响应信息,也就是上面所说的,服务员在有空的时候,会去询问一下客人是否完成了点菜,如果用户点菜完成了,则再帮助客人进行下单。

三、客人觉得总被询问好像不太好:

虽然经历了改革,使服务员服务到了更多的客人,但是客人觉得总是被询问似乎不太好,而且服务员经常这样跑来跑去也很疲倦,聪明的老板又引进了新的方式进行了第二次改革,在每个客人的桌子上添加了一个反应器,在客人点单完成后,主动由客人来呼叫服务员前来服务。

四、反应器模式

java的NIO,非阻塞IO,在上面的模式上进行了改进,将轮询的模式,改为了通知的模式,在处理器完成了对数据的准备过程以后,再由处理器通知应用,来对数据进行处理。

猜你喜欢

转载自blog.csdn.net/qq_35427785/article/details/81841365