Java NIO 第一章 介绍(1)
来源:互联网 发布:linux jdk1.7 tar.gz 编辑:程序博客网 时间:2024/05/17 09:27
第一章 介绍
首先接受那些事实,之后你就能去扭曲他们。
Mark Twain
让我们讨论一下输入输出(I/O)吧!不,不,算了吧,我们不想谈那么无聊的东西!输入输出(I/O)虽然不是一个有趣的东西, 但确实是一个非常重要的东西。很多程序员觉得处理I/O跟处理下水道一样:毫无疑问它非常重要,生活中都不能缺少它,但是人们却极不情愿直接去面对它,尤其是当它不能正常工作的时候,你将到处闻到它们散发出的恶臭。当然这本书不是一本谈论下水道的书,在下面的章节里,你将会学到怎样让你的数据流更加流畅。
面向对象设计所作的都是封装。封装的确是一个好东西:它可以划分职责,隐藏具体实现,提供代码可重用性。这种职责划分和封装非常有利于程序员和程序。你可能是一个经验丰富的Java程序员,就算你一点都不知道Java平台中IO的基本概念,你仍然可以写出非常复杂的对象和非常不一般的程序。这一章中,我们将暂时违反你的封装原则,看一看底层的IO实现,希望它能够让你更好的协调你IO操作中不同部分的衔接。
1.1 IO vs CPU
绝大多数程序员把自己想象成软件艺术家,在这里弄一些聪明的代码来减少一些字节的消耗,在那里展开一个循环,在另外一些地方重构一下增强对象功能。尽管这些东西非常的重要,但是有趣的是这些优化很容易被低效的IO掩盖的一文不值。操作IO数据花费的时间跟操作内存数据相比完全不在一个数量级上。很多的码工们往往只注意到操作数据的对象,而忽略了那些包含获取、排序数据的环境因素。
表1-1列举了处理单位数据量的任务在读取和写入硬盘所消耗的时间(这个时间是假设的,但符合实际意义)。第一列表示CPU处理一单位数据所消耗的平均时间,第二列表示将那个数据单元进行读写的时间,第三列表示单位时间处理的数据吞吐量,最后一列表示吞吐量的改变的百分比,它是由前面两列计算得来。
表1-1 吞吐率,CPU时间vs IO时间
CPU时间(ms)
IO时间(ms)
吞吐量(单元/s)
增量(%)
5
100
9.25
0(基准)
2.5
100
9.76
2.44
1
100
9.9
3.96
5
90
10.53
10.53
5
75
12.5
31.25
5
50
18.18
90.91
5
20
40
320
5
10
66.67
600
前面三列可以看出CPU时间对吞吐量的影响。减小一倍的时间对吞吐量的提升仅仅只有2.2%。然而仅仅降低10%的IO延迟就可以提升9.7%的吞吐量。当然当你看到花费在IO上的处理时间是在CPU上的二十倍或者更多时,你就不会对降低一半的IO延迟就会得到将近一倍的吞吐量感到惊奇。
上面的数据是为了举例说明两者的相对时间数量级而估计的,真实世界绝不会如此简单。从上面的表中可以看出IO经常是影响应用程序吞吐量的限制性因素,而不是处理器时间。程序员喜欢去优化他们的代码,但是往往把IO调整放到最后,甚至是直接忽略他们。这是一件非常遗憾的事,因为即使是对IO做非常少量的优化也会对程序性能有本质的提升。
- Java NIO 第一章 介绍(1)
- Java NIO 第一章 介绍(2)
- Java NIO 第一章 介绍(3)
- Java NIO 第一章 介绍(4)
- Java NIO 第一章 介绍(5)
- Java NIO 第一章 介绍(6)
- Java NIO 第一章 介绍(7)
- Java NIO 第一章 介绍(8)
- 《Java NIO》之第一章 简介
- 读书笔记-《Java NIO》 : 第一章 简介
- java nio SocketChannel (聊天功能)+NIO介绍
- java nio介绍
- java的NIO介绍
- Java NIO介绍
- Java NIO介绍(一)
- Java NIO介绍(二)
- Java NIO介绍(三)
- Java NIO详细介绍
- MyEclipse自动补全设置与快捷键设置
- 号外! 2010年9月27日发布:BlackBerry Web Plug-in for Eclipse v2.5 (for Eclipse 3.6)
- IT人士应当知道的10个行业小内幕
- 内核线程、轻量级进程、用户线程
- Oracle解锁的SQL
- Java NIO 第一章 介绍(1)
- 企业资源计划(ERP)教程 清华大学出版社
- 去除Html标签
- 在freeBSD下搭建php共享Session
- 软件编程21法则
- 魔兽(1.20E 1.24B 1.24E)作弊内存地址全公开
- sql2005连接失败
- spring注入方式及集合注入
- 在Excel工作表单元格中手动输入各种数据