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通道,需要操作系统的支持。