Java NIO 和 IO 之间的主要差别

作者: 陈安妮annie1 | 来源:发表于2017-12-22 10:43 被阅读21次

NIO 和 IO 之间的主要差别

IO                         NIO

面向流                 面向缓冲

阻塞IO                非阻塞IO

无                       选择器

阻塞与非阻塞IO

同步和异步关注的是消息通信机制

同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用

异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。

非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

举个通俗的例子:

你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,

等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。

而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,

他会主动打电话给你。在这里老板通过“回电”这种方式来回调。

你打电话问书店老板有没有《分布式系统》这本书,你如果是阻塞式调用,你会一直把自己“挂起”,直到得到这本书有没有的结果,

如果是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去玩了, 当然你也要偶尔过几分钟check一下老板有没有返回结果。

在这里阻塞与非阻塞与是否同步异步无关。跟老板通过什么方式回答你结果无关。

选择器(Selectors)

Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,

直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。

Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。

而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,

但不需要等待它完全写入,这个线程同时可以去做别的事情。 线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,

所以一个单独的线程现在可以管理多个输入和输出通道(channel)。

Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:

这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。

想要更多java资料视频可加群:462403503

注:加群要求 (学习交流群)

1、想学习JAVA这一门技术, 对JAVA感兴趣,想从事JAVA工作的。

2、工作0-5年,感觉自己技术不行,想提升的

3、如果没有工作经验,但基础非常扎实,想提升自己技术的。

4、还有就是想一起交流学习的。

群内每天会分享视频和资料,可以免费领取学习视频和资料

相关文章

  • Java NIO 和 IO 之间的主要差别

    NIO 和 IO 之间的主要差别 IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 ...

  • Java NIO与BIO

    Java NIO和IO的主要区别 面向流与面向缓冲 Java NIO和IO之间第一个最大的区别是,IO是面向流的,...

  • IO、NIO

    IO、NIO Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO...

  • Java IO介绍

    Java IO介绍 Java IO主要是指的是java.io和java.nio两个包下提供的对IO操作的功能(由于...

  • Java之NIO(非阻塞IO)

    【1】NIO的与IO的区别: 总的来说java 中的IO 和NIO的区别主要有3点:1)IO是面向流的,NIO是面...

  • 3 java的IO

    java nio Java的IO体系:旧IO新IO:nio,用ByteBuffer和FileChannel读写ni...

  • 01Nio-Buffer

    缓冲区的使用 Java IO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO...

  • 详解IO复用模型select,poll,epoll机制

    在Java中,主要有三种IO模型,分别是阻塞IO(BIO)、非阻塞IO(NIO)和 异步IO(AIO)。Java中...

  • Java NIO

    一、NIO概述 NIO即 non-blocking IO,非阻塞IO,在java中实现主要通过Channel、Bu...

  • 1.Netty基本-io模式,线程模型,Reactor模式都啥呀

    关于IO模式,线程模型? Java的io模型分为三种,(BIO,NIO,AIO),Netty现在主要推荐的(NIO...

网友评论

    本文标题:Java NIO 和 IO 之间的主要差别

    本文链接:https://www.haomeiwen.com/subject/ojjtgxtx.html