NIO 再复习



java 的IO,在cpu越来越牛逼过程中,渐渐变得不协调了。cpu超快,性能都卡在IO上了。书上比喻:操作系统用卡车运数据,Java IO用铲子铲。。。很形象。有人说,我们可以通过JNI来提升IO啊,但是如果这样,我们就牺牲了java平台的独立性。你的代码就要和具体的操作系统绑定了。NIO通过新的设计和直接内存访问,提供高速IO。具体的NIO到底如何提升java的IO,呢,我们下面就深入了解NIO。

一、缓冲区操作:

缓冲区对于基本I/O来说,是十分重要的概念。从上层来说,I/O的基本就是把数据填充缓冲区,或者从缓冲区取出。对于底层操作系统来说,可能是很复杂的事情。看图:
NIO 再复习
可以看到,缓冲区分为用户空间的缓冲区和内核空间的缓冲区。用户程序通过系统调用要求读取数据,内核向磁盘控制器发出请求,磁盘控制器通过DMA把内存放入内核缓冲区,内核再根据用户的需要,把数据拷贝至用户空间缓冲区。为什么要这么麻烦呢?
1、硬件是不知道用户空间地址的
2、像磁盘这样固定数据块操作,并不能与用户请求的大小匹配。
3、内核程序可以实现高速缓存等实现。如果内核缓冲区有数据,那么就直接拷贝到用户空间而不需要再从硬件读取。

你可能感兴趣的:(nio)