IO对程序的影响

[img]http://dl.iteye.com/upload/attachment/468086/4aa4d74a-3673-346b-9e00-f10614644c94.png[/img]
以上图来自书籍 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( )方法。
这些方法与底层操作系统调用相当接近,尽管必须保留至少一份缓冲区拷贝。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值