免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 9562 | 回复: 34
打印 上一主题 下一主题

有数据有真相,Perl还是很快的~~~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-17 18:31 |只看该作者 |倒序浏览
首先用ruby产生一个充满随机数的文件,共500万行,每行7列。

  1. x = Random.new
  2. f = File.open("500w.txt","w")

  3. 5000000.times do |c|
  4.    str = ''
  5.    7.times do |d|
  6.      str << x.rand(10000..99999).to_s + " "
  7.    end
  8.    f.puts str
  9. end
复制代码


执行完后获得500w.txt文件,耗时1分16秒:

$ time ruby random.rb

real    1m16.227s
user    1m14.022s
sys     0m1.391s


该文件大小和长度:

$ wc -l 500w.txt
5000000 500w.txt

$ du -h 500w.txt
206M    500w.txt


然后编写一个stat.rb脚本,和一个stat.pl脚本,统计第6列的唯一出现次数。
ruby脚本如下:

  1. hash = Hash.new(0)

  2. File.open("500w.txt").each do |c|
  3.    hash[$2] +=1 if c =~ /^(\S+\s+){5}(\S+)/
  4. end

  5. puts hash.keys.size
复制代码


perl脚本如下:

  1. use strict;

  2. my %hash;
  3. open my $fd,"500w.txt" or die $!;
  4. while(<$fd>) {
  5.     $hash{$2} ++ if /^(\S+\s+){5}(\S+)/;
  6. }
  7. close $fd;

  8. print scalar keys %hash;
复制代码



执行ruby脚本:

$ time ruby stat.rb
90000

real    0m29.532s
user    0m29.343s
sys     0m0.163s


执行perl脚本:

$ time perl stat.pl
90000
real    0m19.755s
user    0m19.518s
sys     0m0.229s


ruby的版本:
$ ruby -v
ruby 1.9.2p0


perl的版本:
$ perl -v
This is perl, v5.8.8 built for i686-linux


CPU:Xeon CPU 2.8G,多少核不用管了,反正用不着。
内存:物理内存2G,执行过程中未用到交换内存。

总结:ruby比perl慢了1/3。这取决于几方面:
(1)I/O的效率。
(2)Hash的效率。
(3)正则表达式的效率。

结合邮件列表上曾经的相关讨论可认为,是Perl的正则表达式执行效率完全胜出!

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
2 [报告]
发表于 2010-11-17 18:46 |只看该作者
仙子有空测试下 5.12 ?5.10的内部实现的改动不知道对性能有什么影响啊

论坛徽章:
0
3 [报告]
发表于 2010-11-17 19:50 |只看该作者
仙子有空测试下 5.12 ?5.10的内部实现的改动不知道对性能有什么影响啊
zhlong8 发表于 2010-11-17 18:46



    hoho~~你自己也可以测试下嘛~~
装一个ruby 1.9,不要1.8,慢的要死。

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
4 [报告]
发表于 2010-11-17 20:40 |只看该作者
回复 3# 兰花仙子


    主要多版本共存不知道有没什么好的解决办法 win 下

论坛徽章:
0
5 [报告]
发表于 2010-11-17 20:49 |只看该作者
回复  兰花仙子


    主要多版本共存不知道有没什么好的解决办法 win 下
zhlong8 发表于 2010-11-17 20:40



    win下不清楚。。linux下安装perl可以指定--prefix,安装到不同目录。

论坛徽章:
1
辰龙
日期:2014-05-15 19:37:15
6 [报告]
发表于 2010-11-17 21:11 |只看该作者
支持 Perl 。。。。。。也支持用 Perl 6

论坛徽章:
0
7 [报告]
发表于 2010-11-17 22:08 |只看该作者
在有大量数据分隔时,split可能是最慢的了,substr比它快很多,正则也比它快很多,substr和正则谁快就不知道。

Perl已经足够快了,大多数情况下可以忽略这个问题,况且,现在的计算机已经相当快了,超过了大多数人的需求。

Perl真是头好骆驼,吃苦耐劳,而且它并不慢。

论坛徽章:
0
8 [报告]
发表于 2010-11-17 22:28 |只看该作者
所以说perl的确是雄风犹在~

论坛徽章:
0
9 [报告]
发表于 2010-11-18 07:11 |只看该作者
ruby 1.9还是慢?仙子看来是打击我了。

论坛徽章:
0
10 [报告]
发表于 2010-11-18 09:24 |只看该作者
ruby 1.9还是慢?仙子看来是打击我了。
2gua 发表于 2010-11-18 07:11



    你可以测试下啦~~~
还有py谁也可以测试下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP