跟我学系列之趣解NIO和IO的区别

在上一次分享中,咱们谈到了阻塞与非阻塞,同步与异步的区别,http://www.jianshu.com/p/e9c6690c0737

那么在这一次分享中,咱们主要是以讲故事的方式讲述一下NIO和IO的区别。那么在下一次分享中,将进行Java NIO源码的分析。

故事的背景:

有一个动物园,动物园里面有狮子,老虎,猴子等动物,他们每天定期来吃不同的水果,而这些水果要由动物园管理员到货场领取分配。

一、IO

我们知道,在使用IO的时候往往可以在服务器端使用多线程或者线程池来处理并发请求,这也叫伪异步,那么故事开始了:

在货场里有五个动物园管理员等待水果货车的到来,他们一直在等待,如果货车不来他们也要死等,直到货车的到来,这时候货车来了,每个管理员都领了一份水果去寻找动物,管理员A来到狮子旁边,给狮子一份苹果,狮子开始吃,中途吃累了,休息了一会儿继续吃,这时候管理员A就一直等着狮子吃完,再回去拿水果去另一个动物那里。五个管理员都是这样做的。

二、NIO

Java NIO是在jdk1.4开始使用的,它既可以说成“新IO”,也可以说成非阻塞式I/O。下面是java NIO的工作原理:

由一个专门的线程来处理所有的IO事件,并负责分发。

事件驱动机制:事件到的时候触发,而不是同步的去监视事件。

线程通讯:线程之间通过wait,notify等方式通讯。保证每次上下文切换都是有意义的。减少无谓的线程切换。

那么故事开始了:动物园里,有一个管理员他先去了解动物们都喜欢吃什么样的水果并做了一个登记,然后去货场看一看货车有没有到来,如果没有来他就回去继续干别的事,就这样每隔一段时间就去货场看一下。这时候货车来了,他叫来另外五个管理员并告诉管理员哪些动物喜欢吃哪些水果,管理员们分类取不同的水果,然后各自去找动物们分发水果,还是管理员A,来到狮子旁边把它喜欢吃的苹果给它吃,狮子吃的比较慢,这时候管理员A说,你先吃着,我给其他动物送水果,我一会儿再来取水果盘子,这时候管理员A回去取来香蕉继续猴子送去,在猴子吃香蕉累了休息的时候,管理员A来找狮子拿回水果盘子,再去找猴子拿回水果盘子。

不知道大家在看完这二个小故事之后有没有理解NIO和IO,那么在下次分享的时候,咱们将正式进入NIO原理及源码的分享,谢谢大家。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 故事的背景: 有一个动物园,动物园里面有狮子,老虎,猴子等动物,他们每天定期来吃不同的水果,而这些水果要由动物园管...
    Bobby0322阅读 453评论 0 2
  • 当学习了Java NIO和IO的API后,一个问题马上涌入脑海:我应该何时使用IO,何时使用NIO呢?在本文中,我...
    大弃阅读 972评论 0 5
  • IONIO小结 I/O I/O ? 或者输入/输出 ? 指的是计算机与外部世界或者一个程序与计算机的其余部分的之间...
    六尺帐篷阅读 2,488评论 0 8
  • 我的世界,你来过,我爱过,这就够了,有情不必求相守,不知何时想起这一句,那时候,我以为我是唯心主义者,只要精神能量...
    九夜茴Harvest阅读 339评论 0 0
  • 我不知道你什么时候来 也不知道你什么时候走 我只求你来时轻轻松松 走时也不回头 我希望我遇见你时我没有身边人 也只...
    兔子尾巴鼠阅读 603评论 1 2