《编程珠玑(续)(修订版)》—第1章1.3节专用的性能监视工具

本节书摘来自异步社区《编程珠玑(续)(修订版)》一书中的第1章,第1.3节专用的性能监视工具,作者【美】Jon Bentley,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.3 专用的性能监视工具
到目前为止我们所看到的性能监视工具的原理,适用于从汇编和Fortran直到Ada这样的程序设计语言,但是很多程序员现在使用更强大的语言。如何监视Lisp或APL程序的计算性能?又如何监视网络或数据库语言程序的计算性能?

我们打算用UNIX的管道(pipeline)作为更有趣的计算模型的例子。管道是一系列的过滤程序(filter):当数据流经每个过滤程序时,对数据施加变换。下面这个经典的管道按照频率递减顺序打印某文件中使用最多的25个单词③。

cat $* ¦
tr -cs A-Za-z '\012' ¦
tr A-Z a-z ¦
sort ¦
uniq  -c ¦
sort -r –n ¦
sed 25q

当用这个管道在一本大约6万字的书中寻找25个最常见的单词时,我们监视这个管道的性能。输出的前6行是:

3463 the
1855 a
1556 of
1374 to
1166 in
1104 and
  ...

下面是对VAX-11/750上计算的“管道性能监视”:

lines   words    chars       times
10717  59701    342233   14.4u 2.3s  18r  tr -cs A-Za-z \012
57652  57651    304894   11.9u 2.2s  15r  tr A-Z a-z
57652  57651    304894   104.9u 7.5s 123r  sort  
57652  57651    304894   24.5u 1.6s 27r   uniq –c
 4731   9461    61830    27.0u 1.6s 31r   sort -rn
 4731   9461    61830    0.0u 0.2s 0r    sed 25q
  25     50     209

左边几列说明每个阶段的数据:行数、单词数、字符数。右边部分描述了数据阶段之间的过滤程序:用秒表示的用户时间、系统时间以及真实时间,后面是命令本身。

这个性能监视结果给出了程序员感兴趣的许多信息。这个管道是快速的,处理150页的书只需3.5分钟。第一次排序花了这个管道57%的运行时间,这种经过仔细调优的实用程序很难再提速了。第二次排序只花了这个管道14%的时间,但是还有调优的余地④。这个性能监视结果还发现了管道中隐藏的一处小错误。UNIX高手们会乐于找出引入空行的地方。

这个性能监视结果也透露了文件中单词的信息:共有57 651个单词,但只有4731个不同的单词。在第一个翻译程序之后,每个单词有4.3个字母。输出表明,最常见的单词是“the”,占了文件的6%。6个最常见的单词占了文件的18%。对英语中最常见的100个单词做专门处理也许还能提高速度。试试看从这些计数中找出其他有趣的表面规律。

跟许多UNIX用户一样,我过去也用手工监视管道的性能,利用单词计数(wc)命令来统计文件,用time命令来统计进程。“管道性能监视工具”让这个任务自动化了。用管道和一些输入文件的名称作为输入,产生性能监视结果作为输出。2个小时和50行代码就足以建立这个性能监视工具。下一节详细阐述这个话题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值