Encapsulation is a good thing:
It partitions responsibility, hides implementation details, and promotes object reuse.
封装:按职责划分类,隐藏实现细节,提供对象重用。
IO Versus CPU Time
应用程序开发过程中,使用各种技巧将程序设计得更灵活,更优雅,更具扩展性是非常重要的。然而,很多人往往在其它方面花大力气,却忽视了另一个重要的方面:对IO操作没有给予足够的重视。
IO操作是否高效,将很大程度上影响系统的响应速度。
打个不是很恰当的比喻:
花100倍力气在程序(非IO)优化上,应用服务器吞吐量提高2倍
花10倍力气在IO程序优化上,应用服务器吞吐量提高100倍
应用IO非常耗时,稍微优化一点,性能就有上升很多。
所以,当发现程序完成一个功能,IO操作会占据很大一部分时间,那就需要去关注IO操作的优化了。否则,那些你精心设计的代码也只能空闲着(等待IO操作)。
No Longer CPU Bound
不要因为没有及时提供数据给CPU,而让CPU处于等待数据的状态,这是一种浪费。
比如:CPU希望一次处理一卡车的数据。
由于传统IO的低效:面向流Stream,一个字节/一行代码(传统IO类提供的数据大小为一铲子的量),极度不满足CPU的需求,最终导致CPU很多时候都是处于“等待数据”的状态,不能有效的利用CPU的处理能力。(注意:传统IO也可以通过封装数据到缓冲区Buffer,一次提供一车数据给CPU,只是决定权在程序员那里!)
NIO的出现,解决了数据量的问题,一次装一卡车(a Buffer Object )数据给CPU,让CPU尽情的处理。NIO倡导通过卡车(Buffer)运输数据给CPU。
Getting to the Good Stuff
NIO包提供了新的抽象体系解决低效IO的问题。
Channel、Buffer、Selector构成了NIO的核心,为高效IO提供了丰富的API进行数据操作。
虽然NIO不能访问任何操作系统的底层代码,但是NIO所提供的高性能IO操作,在大多数商业操作系统上都是可用的。
Buffer Handling
消除将数据从Kernel Space 到User Space的拷贝过程,提供效率
磁盘数据拷贝到JVM内存中需要经历几个步骤:
实现原理:
1. More than one virtual address can refer to the same physical memory location.
2. A virtual memory space can be larger thanthe actual hardware memory available.
By mapping a kernel space address to the same physicaladdress as a virtual address in user space, the DMA hardware (which can access only physical memory addresses) can fill a buffer that is simultaneously visible to both the kernel and a user space process.
由内核地址空间映射到同一个物理地址作为用户空间的虚拟地址
DMA硬件(只能访问物理内存地址)仍然将数据装入到内核空间
该缓冲区(内核空间在内存中的映射地址所指内存区域)同时对内核和用户空间是可见的。这样,将数据写入内核也就变相的写入到了用户空间了,JVM直接访问用户空间的虚拟地址就可以拿到内核缓存区的数据。
相关推荐
赠送jar包:xnio-nio-3.8.0.Final.jar; 赠送原API文档:xnio-nio-3.8.0.Final-javadoc.jar; 赠送源代码:xnio-nio-3.8.0.Final-sources.jar; 赠送Maven依赖信息文件:xnio-nio-3.8.0.Final.pom; 包含翻译后的API...
赠送jar包:xnio-nio-3.8.4.Final.jar; 赠送原API文档:xnio-nio-3.8.4.Final-javadoc.jar; 赠送源代码:xnio-nio-3.8.4.Final-sources.jar; 赠送Maven依赖信息文件:xnio-nio-3.8.4.Final.pom; 包含翻译后的API...
赠送jar包:xnio-nio-3.8.0.Final.jar; 赠送原API文档:xnio-nio-3.8.0.Final-javadoc.jar; 赠送源代码:xnio-nio-3.8.0.Final-sources.jar; 赠送Maven依赖信息文件:xnio-nio-3.8.0.Final.pom; 包含翻译后的API...
赠送jar包:xnio-nio-3.8.4.Final.jar; 赠送原API文档:xnio-nio-3.8.4.Final-javadoc.jar; 赠送源代码:xnio-nio-3.8.4.Final-sources.jar; 赠送Maven依赖信息文件:xnio-nio-3.8.4.Final.pom; 包含翻译后的API...
用Java实现非阻塞通信 ,用ServerSocket和Socket来编写服务器程序和客户程序,是Java网络编程的最基本的方式。 httpcore-nio-4.3.jar包
Java I/O, NIO, and NIO.2 is a power-packed book that accelerates your mastery of Java's various I/O APIs. In this book, you'll learn about classic I/O APIs (File, RandomAccessFile, the stream classes ...
New I/O (NIO), and NIO.2 categories. You learn what each category offers in terms of its capabilities, and you also learn about concepts such as paths and Direct Memory Access. Chapters 2 through 5 ...
这是一本介绍java io以及nio相关知识的书,书中对知识的讲解通俗易懂,是学习java nio以及复习java io相关知识的必备书籍。注意:本书为英文版!!!
基于Java NIO实现五子棋游戏.zip基于Java NIO实现五子棋游戏.zip 基于Java NIO实现五子棋游戏.zip基于Java NIO实现五子棋游戏.zip 基于Java NIO实现五子棋游戏.zip基于Java NIO实现五子棋游戏.zip 基于Java NIO实现...
NIO项目源码.zip
java NIO.zip
Apress.Pro.Java.7.NIO.2.2011
java运行依赖jar包
Java NIO 中文版.rar
Pro Java 7 NIO.2.pdf,2011 by Anghel Leonard
httpcore-nio-4.4.9.jar
java运行依赖jar包
Java.nio 与Java.io比较
nio+Future.rar