nio

来源:互联网 发布:做java程序员有前途吗 编辑:程序博客网 时间:2024/06/09 20:57

http://www.csdnjava.com/forum.php?mod=viewthread&tid=52809

 

2013/3/10 0:44:36

细微的行动远胜空美的计划,去做,才会发现时间不够用,才会体会到精髓,才会体会到真正的“道”,才能真正掌控。

 

zero-copy-capable

通常的数据拷贝受制于传统的操作系统或通信协议,网卡-->内核-->用户空间,比如linux-网卡的ring-buffer

zero-copy减少数据在存储器之间不必要的拷贝和共享总线操作的次数。

 

DMA(Direct Memory Access,直接内存存取)

DMA传输时, DMA控制器直接掌管总线,总线控制权转移:CPU-->DMA控制器-->CPU

 

内存映射文件和锁

Win32用CreateFileMapping函数。特别适合大数据文件的copy。

与虚拟内存有些类似,把文件映射到到一块内存。内存映射文件保留一个地址空间的区域,将物理存储器提交给此区域,先对文件进行映射,、就可以用内存读/写指令访问,而不是用ReadFile和WriteFile这样的I/O系统函数,从而提高了文件存取速度。

 

netty-异步。

write() 之后并不直接写数据, 而是将数据写入一个队列, 然后返回. 由worker线程取出, 执行写操作, 成功后发送事件, 也就调用了你的那个 Listener

 

一. 介绍NIO

java.nio.* 引入了四个关键的抽象数据类型

1.Buffer : 包含数据用于读写的线形表结构。其中DirectByteBuffer,MappedByteBuffer用于内存映射文件的I/O操作。

数据流:应用程序<-->数据缓存<-->操作系统数据IO设备,(Direct)的ByteBuffer是一块连续的空间,是native代码,内存的分配不在Java的堆栈中,不受java内存回收的影响.

视图缓冲:在一个数据缓冲之上也可以建立多个逻辑的buffer

2.Charset : Unicode字符序列<-->字节序列的相互映射。

3.Channel : connection to an entity such as a hardware device, a file, a network socket and other I/O operations

4.Selector:A multiplexor多路复用器 of SelectableChannel(unix的select()/poll(),win32的WaitForSingleEvent()) 

NIO需要Selector向SelectableChannel注册特定的事件,等待通知,传统I/O一直阻塞不需要通知。可以用一个线程就能同时有效地管理多个IO通道,需要操作系统的支持。