`
flychao88
  • 浏览: 753192 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

跟我学系列之趣解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原理及源码的分享,谢谢大家。

分享到:
评论

相关推荐

    IO和NIO区别

    IO和NIO区别 Java 中的 IO 和 NIO 是两个不同的输入/输出机制,它们之间有许多区别。下面我们将详细讲解 IO 和 NIO 的区别。 1. 数据处理方式 标准 IO 以流的方式处理数据,也就是说数据是以流的形式传输的,而 ...

    Java_NIO与IO的区别和比较.doc

    相比于传统的IO(Input/Output)模型,NIO引入了非阻塞I/O、字符转换、缓冲和通道等新特性,极大地提高了Java程序在处理I/O操作时的性能。 1. **Buffer**:在传统的IO操作中,数据通常直接在流之间传输,这可能导致...

    NIO学习系列:连网和异步IO

    本篇文章将深入探讨NIO在连网和异步IO方面的应用,以及如何通过源码理解和实践相关技术。 首先,我们了解NIO的核心概念。NIO不同于传统的IO模型(即BIO,Blocking IO),它引入了通道(Channel)和缓冲区(Buffer)...

    NIO与传统IO代码区别实例

    在Java编程领域,IO(Input/Output)和NIO(Non-blocking Input/Output)是两种不同的I/O模型,它们在处理数据输入和输出时有着显著的差异。本教程旨在帮助NIO初学者理解这两种模型的核心概念及其实际应用,通过具体...

    Java NIO与IO的区别和比较.pdf

    ### Java NIO与IO的区别和比较 #### 引言 随着网络技术的飞速发展,企业和个人对网络应用程序的性能要求日益提高。特别是在高并发环境下,服务器需要处理来自数百乃至数千个客户端的同时连接请求,这使得传统的...

    java nio与io性能测试

    在Java IO中,数据的读写是通过流进行的,而NIO则引入了通道(Channel)和缓冲区(Buffer)的概念,使得数据操作更加高效。本文将深入探讨Java NIO与IO的性能测试,并通过代码实例来展示它们之间的差异。 首先,...

    Java NIO与IO性能对比分析.pdf

    Java NIO(New IO,也称为Non-blocking IO)和传统的Java IO是Java编程语言中用于处理I/O操作的两种主要技术。随着互联网用户数量的激增,企业对应用程序的并发处理能力提出了更高的要求。为了解决传统Java IO模型在...

    Java IO_NIO

    **NIO与IO的区别** 1. 阻塞与非阻塞:Java IO是阻塞的,而NIO是非阻塞的,可以在没有数据可读时不做等待,而是继续处理其他任务。 2. 多路复用:NIO的选择器允许单线程管理多个通道,而传统的IO需要为每个连接创建一...

    java io 与java nio区别

    ### Java IO 与 Java NIO 的区别 在深入探讨Java IO与Java NIO之间的区别之前,我们先简单回顾一下这两种I/O模型的基本概念。 #### 1. Java IO(Blocking IO) Java IO,也称为传统的阻塞式IO或同步阻塞式IO,是...

    Nio和Io的详细描述.docx

    Java NIO(New IO)是Java提供的一种替代标准Java IO和Java网络编程API的全新IO接口。NIO引入了一种不同于传统IO编程模型的机制。虽然有时人们将NIO理解为非阻塞IO,但这是不准确的。实际上,NIO API的部分功能,如...

    Java-NIO与IO的区别和比较.doc

    Java NIO(New Input/Output)是Java标准库在J2SE 1.4及后续版本中引入的一个重要更新,它的出现是为了改进传统的IO模型,提高I/O操作的效率和并发性。NIO的主要特点包括非阻塞I/O、字符转换、缓冲区以及通道等。 1...

    nio与io的比较

    NULL 博文链接:https://aga.iteye.com/blog/206691

    自己封装的IO核NIO

    在IT行业中,输入/输出(IO)和网络IO(NIO)是编程中不可或缺的部分,尤其是在处理大量数据传输和网络通信时。Java平台提供了丰富的IO和NIO API,但它们的使用往往相对复杂,需要对底层机制有深入理解。本文将详细...

    JavaIO和NIO练习

    Java IO(Input/Output)和NIO(New IO)是Java平台中用于处理输入和输出操作的核心库。这两个系统提供了不同的方式来读取和写入数据,分别适用于不同类型的场景和需求。 Java IO体系主要基于流(Stream)的概念,...

    NIO和IO中文概述文档.docx

    NIO与传统的IO(-blocking IO)的主要区别在于处理I/O事件的方式以及对并发的处理能力。 传统的Java IO基于流(Stream)模型,数据被读取或写入时,程序会一直阻塞直到操作完成。而NIO则引入了通道(Channel)和缓冲区...

    Ioserver java Nio socket 框架

    Ioserver java Nio socket 框架 是个不错的NIO 通讯框架,本来想学习mina框架,看了看mina的源码太头痛,本人觉得看懂了Ioserver 再看mina的框架,想多的学习 java NIO 的也可以下载 看看,很值得学习啊!!!

    高性能网络编程必备技能之IO与NIO阻塞分析

    本文将重点探讨Java中的IO(Input/Output)和NIO(Non-blocking I/O)模型,以及它们在处理阻塞问题上的差异。 IO模型在Java中是基于流的,它主要通过`InputStream`和`OutputStream`接口及其子类来实现数据的读写。...

    Java IO NIO and NIO 2 无水印pdf

    Java IO NIO and NIO 2 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn...

Global site tag (gtag.js) - Google Analytics