`
liyixing1
  • 浏览: 967081 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

IO对程序的影响

阅读更多

以上图来自书籍 JAVA NIO中文版。

前三行显示了处理阶段的效率提升会如何影响吞吐率。
4,5,6,7,8行显示的是处理时间不变,IO时间对程序的影响。仅仅缩短 I/O 延迟 10%,就可使吞吐率增加 9.7%;把 I/O 时间减半,吞吐率
几乎翻番。

。现在 JVM 运行字节码的速率已经接近本地
编译代码,借助动态运行时优化,其表现甚至还有所超越。这就意味着,多数 Java 应用程序已不
再受 CPU 的束缚(把大量时间用在执行代码上),而更多时候是受 I/O 的束缚(等待数据传
输)。

操作系统与 Java 基于流的 I/O
模型有些不匹配。操作系统要移动的是大块数据(缓冲区),这往往是在硬件直接存储器存取
(DMA)的协助下完成的。而 JVM 的 I/O 类喜欢操作小块数据——单个字节、几行文本。结果,
操作系统送来整缓冲区的数据,java.io 的流数据类再花大量时间把它们拆成小块,往往拷贝一
个小块就要往返于几层对象。操作系统喜欢整卡车地运来数据,java.io 类则喜欢一铲子一铲子
地加工数据。有了 NIO,就可以轻松地把一卡车数据备份到您能直接使用的地方(ByteBuffer 对
象)。
这并不是说使用传统的 I/O 模型无法移动大量数据——当然可以(现在依然可以)。具体地
说,RandomAccessFile 类在这方面的效率就不低,只要坚持使用基于数组的 read( )和 write( )方法。
这些方法与底层操作系统调用相当接近,尽管必须保留至少一份缓冲区拷贝。
  • 大小: 40.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics