开发者社区> colincheng> 正文

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

简介: 在上一次分享中,咱们谈到了阻塞与非阻塞,同步与异步的区别,http://www.jianshu.com/p/e9c6690c0737 那么在这一次分享中,咱们主要是以讲故事的方式讲述一下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原理及源码的分享,谢谢大家。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
java Nio(一) : Nio 和Io 的区别
java Nio(一) : Nio 和Io 的区别
48 0
Java NIO、BIO、 AIO 与 同步、阻塞、非阻塞、异步IO 简析
我相信大部分人看到这些名词,都是一头雾水的,如果你去搜索引擎搜索,那么恭喜你,你又会被各种文章中的高大上的名词搞得云里雾里。那么,我们应该怎么理清这么名词之间的关系呢? 所谓 同步/异步/阻塞/非阻塞 IO ,是指操作系统中的对 IO 处理的不同方法,而 Java 对这些不同操作方法做了一些包装,由此有了 BIO / NIO / AIO 几种操作接口。 我不想复制一些高大上的概念,只是想尽量好好说话,说清楚他们之间的关系。 需求 有 A、B、C、D 四个线程可以生产文件,假设他们的返回的文件是一样的,对应我们的服务端 有 E、F、G、H 四个线程在随机时间向服务端上传一个文本,并且要求
53 0
Java基础之IO&NIO操作文件流
Java基础之IO&NIO操作文件流
32 0
网络编程:IO 通信模型—BIO&;NIO|学习笔记
快速学习网络编程:IO 通信模型—BIO&;NIO
33 0
02、Netty学习笔记—(NIO网络编程和IO模型)(二)
02、Netty学习笔记—(NIO网络编程和IO模型)(二)
95 0
02、Netty学习笔记—(NIO网络编程和IO模型)(一)
02、Netty学习笔记—(NIO网络编程和IO模型)(一)
69 0
摸鱼不如来了解一下--Java中IO和NIO概念和区别
一、IO和NIO的概念 NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。
50 0
Java 提供了哪些 IO 方式, NIO 如何实现多路复用
Java 提供了哪些 IO 方式, NIO 如何实现多路复用
72 0
+关注
colincheng
12年Java研发经验,8年技术管理和架构经验,熟悉支付和电商领域,擅长微服务生态建设,对Dubbo、Spring Cloud和gRPC等微服务框架有深入研究,并应用于项目,帮助过多家公司进行过微服务建设和改造 合著作品《深入分布式缓存》,目前正在编写《微服务架构实战》
文章
问答
文章排行榜
最热
最新
相关电子书
更多
多IO线程优化版
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载