就速度来说 CPU>内存>硬盘
- I - 就是从硬盘到内存
- O- 就是从内存到硬盘
第一种方式:我从硬盘读取数据,然后程序一直等,数据读完后,继续操作。这种方式是最简单的,叫阻塞IO。
第二种方式:我从硬盘读取数据,然后程序继续向下执行,等数据读取完后,通知当前程序(对硬件来说叫中断,对程序来说叫回调),然后此程序可以立即处理数据,也可以执行完当前操作再读取数据。
在以前的Java IO中,都是阻塞式IO,NIO引入了非阻塞式IO。
还有一种就是同步IO和异步IO。经常说的一个术语就是“异步非阻塞”,好像异步和非阻塞是同一回事,这大概是一个误区吧。
至于Java NIO的selector,在旧的Java IO系统中,是基于Stream的,即“流”,流式IO。
当程序从硬盘往内存读取数据的时候,操作系统使用了2个“小伎俩”来提高性能,那就是预读,如果我读取了第一扇区的第三磁道的内容,那么你很有可能也会使用第二磁道和第四磁道的内容,所以操作系统会把附近磁道的内容提前读取出来,放在内存中,即缓存。
(PS:以上过程简化了)
通过上面可以看到,操作系统是按块Block从硬盘拿数据,就如同一个大脸盘,一下子就放入了一盆水。但是,当Java使用的时候,旧的IO确实基于流Stream的,也就是虽然操作系统给我了一脸盆水,但是我得用吸管慢慢喝。
于是,NIO横空出世。
摘自:https://justjavac.iteye.com/category/28320
标签:Java,NIO,磁道,内存,IO,硬盘,读取数据 来源: https://www.cnblogs.com/Lee_xy_z/p/10473259.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。