`
sharp-fcc
  • 浏览: 110435 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

      在传统的I/O系统中,都是基于byte和流的 ,相应的i/o都是阻塞型的,所以服务器程序也采用阻塞型i/o进行读写操作,而且线程也会阻塞,系统中会有大量用于同客户端进行交互的线程,每个线程都需要较多的系统资源(内存,栈,寄存器),在不同的线程之间切换上下文是个很费时的操作,频繁的线程切换会造成系统性能的急速下降。
   

      nio特性:

      针对传统的i/o,java nio通信机制采用了基于buffer,channel,selector的机制。

      buffer(缓冲区):Buffer是个抽象类,每个基本类型都有Buffer的封装,比如说IntBuffer,他们都重写了Buffer 的方法,都包含一个数组作为当然ByteBuffer是个例外,他比较特殊,由于channel是直接对ByteBuffer进行读写的。

     Channel(通道):Channel是一个接口,功能类似于传统io中的stream,但是通道具有两面性,即可以读,也可以写。

     Selector(选择器):负责已经注册的Socket通道,提供channel的状态信息,控制各类channel协同工作。

     这三个重要的抽象定义了非阻塞套接字的工具,非阻塞io作为REACTOR模式的实现,实际上实现了事件发生,自我激活,主动通知机制。selector是实现所有非阻塞技术的主要实现,当一些有意义的事发生在通道上时,选择器便会通知应用程序处理请求。通知的方式是创建一个selectionKey的一个实例,每个关键词都保持着原有的channel和请求的类型。

     

    nio工作机制:

    nio基本思想是有事我通知你,你再去做你的事情,没事件你可以去做其他的事,nio的主线程只有一个,不像多线程,所以使得jvm更加高效,使得jvm处理数据时更加高效,在服务器中使用nio,其实就是用通过网络驱动模型实现的,我们只要将想要关注的事注册到selector,用这一个单线程来管理大量的事件,更好的利用了系统的资源,从而减少了维护系统io需要的开销,大幅度的提高了系统的性能。nio做的事很简单,就是实现的事件的收集和分发。

       打个比方,就像在一辆公交车上,原来是司机到了一站问一下,谁要下车,每个人都得保持时刻清醒,而现在的nio就相当于让每个乘客都睡觉,在睡觉前将所要到的地点告诉乘务员,乘务员在到达目的站后会唤醒乘客。    

    总结:

     好处有两点:第一个线程不在通信时阻塞了。

    第二点,Selector能够处理大量的链接,从而降低了服务器的开销。

   

分享到:
评论

相关推荐

    NIO 入门.chm,NIO 入门.chm

    **NIO(New Input/Output)是Java编程语言中用于替代标准I/O(BIO,Blocking I/O)的一组API,它提供了非阻塞式的I/O操作方式,极大地提升了Java在处理I/O密集型应用时的性能。NIO在Java 1.4版本中被引入,之后在...

    Java NIO入门

    IBM的NIO入门教程通常会涵盖这些基础概念,并通过实例演示如何使用NIO进行实际的I/O操作。教程可能还会深入讲解NIO的高级特性,如scatter/gather(分散/聚集)读写,以及如何使用`Selector`进行多路复用。通过学习这...

    NIO入门pdf分享

    《NIO入门》一书是理解Java NIO(New Input/Output)的重要参考资料,NIO在Java编程中扮演着至关重要的角色,特别是在处理高并发、大数据传输等场景下。本PDF文档将引领读者深入理解这一核心概念。 NIO,全称New ...

    nio入门 IBM教材,pdf格式

    ### NIO 入门知识点详解 #### 一、NIO 的引入及其背景 - **NIO 的起源**:NIO(New Input/Output)库是在 JDK 1.4 中引入的,旨在解决传统 Java I/O 操作的局限性和性能瓶颈。 - **改进目标**:NIO 通过提供高速...

    java nio 入门

    Java NIO(New Input/Output)是Java标准库中的一部分,自Java 1.4版本引入,为开发者提供了更高效的数据处理方式。相比于传统的IO模型,NIO具有非阻塞和选择器等特性,适用于高并发、大数据量的场景。在本文中,...

    IBM Java文档库 NIO 入门

    《IBM Java文档库 NIO 入门》这篇教程主要针对的是Java 1.4引入的New Input/Output (NIO)库,这是一个重要的更新,旨在提高Java程序的I/O性能,特别是面向块的I/O操作。NIO弥补了传统I/O(基于java.io.*包)的不足,...

    Java NIO入门的源码

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种I/O模型,旨在提供一种更高效、更具控制力的I/O操作方式。与传统的-blocking I/O(阻塞I/O)相比,NIO的关键在于它...

    nio入门文档及示例代码

    本入门文档及示例代码旨在帮助开发者快速理解并掌握Java NIO的基本概念和用法。 一、NIO基础概念 1. **通道(Channels)**:NIO的核心组件之一,它是连接到数据源(如文件、套接字)的通道,可以读写数据。常见的...

    NIO入门学习

    NIO 入门 JDK 1.4 中引入的新输入输出 (NIO) 库在标准 Java 代码中提供了高速的、面向块的 I/O。本实用教程从高级概念到底层的编程细节,非常详细地介绍了 NIO 库。您将学到诸如缓冲区和通道这样的关键 I/O 元素的...

    java nio入门学习,两个pdf

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统I/O模型的新技术。在Java 1.4版本中引入,NIO提供了一种全新的I/O编程方式,使得Java开发者能够更高效地处理I/O操作...

    NIO入门学习源码

    **NIO(New Input/Output)**,全称为New IO,是Java中的一种I/O模型,它是相对于传统的BIO(Blocking I/O)模型而言的。NIO在Java 1.4版本引入,主要目的是为了提高在高并发环境下的I/O性能。与BIO不同,NIO是非...

    javaNIO入门(良好排版格式).pdf

    javaNIO入门(良好排版格式).pdf

    java_NIO_入门

    本教程旨在为读者提供一个全面的NIO入门指南,不仅涵盖了NIO的基础理论知识,还包括了实际编程中使用到的代码示例。 在学习NIO之前,读者需要掌握Java语言的一些基本概念,包括类、继承、包等。此外,如果读者对...

    java NIO入门(中英+代码)

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种I/O模型,旨在提供一种更高效、更具控制力的I/O操作方式。与传统的 Blocking I/O(同步阻塞I/O)相比,NIO的核心特点...

    NIO入门

    **NIO(Non-blocking I/O)入门** 在Java编程领域,NIO(Non-blocking Input/Output,非阻塞I/O)是一种重要的I/O模型,它与传统的BIO(Blocking I/O)模型相比,提供了更高的并发性能和更有效的资源利用。NIO在...

    java-NIO-入门教程.docx

    "Java NIO 入门教程" Java NIO(New I/O)是 Java 语言中的一种新的输入/输出机制,自 JDK 1.4 开始引入。不同于传统的面向流的 I/O,NIO 采用面向块的 I/O 方式,提供了高速的 I/O 操作。NIO 库的主要特点是使用...

    Java NIO 简单入门

    Java NIO(Non-blocking Input/Output)是一种在Java中处理I/O操作的新方式,相比于传统的BIO(Blocking I/O),NIO提供了更高效、更具扩展性的I/O模型。NIO的核心在于非阻塞,它允许Java程序在等待数据就绪时进行...

Global site tag (gtag.js) - Google Analytics