Programming Pearls 的粗略估算中有一道题, 问的是如果世界变慢为原先的百万分之一, 各种操作的时间会变成多少. 这个题可以让人很直观的了解各种操作的耗时代价.
- 计算机执行指令.
按CPU的工作频率在1G Hz, 一个时序为1x10^-9 s, 如果一个指令的执行为4个时序, 则是4x10^-9 s, 扩大1,000,000后应该是 4x10^-3 s, 即4毫秒左右
- 内存读取周期.
如果是DDR2 800(PC6400)的内存, 其IO总线频率是400MHz, 内存频率是200MHz, 读取周期为5 x 10^-9 s, 即5ns, CAS等待时间约为10ns, 合计扩大1,000,000后是 15 x 10^-3 s, 即15毫秒左右
- 磁盘旋转一周的时间.
磁盘按7200转/分计, 每转一周的时间约为 8.3 x 10^-3 s, 即8.3毫秒, 扩大1,000,000后应该是8,300s, 即2.3小时
- 磁盘臂搜索时间.
这个要分为两个时间, 一个是seek time, 寻轨时间或寻道时间, 机械硬盘约为10毫秒, 另一个是达到所需扇区需要的时间rotational latency, 旋转延迟或等待扇区时间, 平均为磁盘旋转一周时间的一半, 按5毫秒计, 所以总共是15毫秒, 扩大1,000,000后约4.1小时. 现在大部分磁盘对批量的寻址有优化, 耗时可能在这个值得一半左右. 现在市面上开始大量出现的固态硬盘SSD, 其寻址时间比机械硬盘有近两个数量级的提升, 0.1毫秒多些, 按扩大1,000,000的话是100秒, 不到2分钟.
- 键入自己名字的时间.
按普通人一分钟输120个字符计(我可以达到180, apm), 名字的平均长度为10个字符, 则总共耗时约为5秒, 扩大1,000,000后约为1389个小时, 或58天