上次powerplane 提到了perl程序速度与c程序速度的问题,
我特意做了如下测试,
结论,速度由快->;慢 为:c程序, perl编译为2进制,perl程序。
c程序是最快的。将perl程序编译以后运行,速度会有提升,但是
还是不太另人满意。
(本结论只限于本类或相关的处理任务,其他方面的速度,没有测试。)
环境:
SunOS usrbj 5.7 Generic_106541-18 sun4u sparc SUNW,Ultra-80
4 X The sparcv9 processor operates at 400 MHz
This is perl, version 5.005_03 built for sun4-solaris
第一个例子:
Squid代理日志里,时间的格式为timestamp,
程序的目的是将其转化为字符串形式,如:
1023389651.867 =>; Fri Jun 7 02:54:11 2002
1300万行的文本,每行都只是一个时间戳。
c程序 -- 4m10.852s
perl编译为2进制运行 -- 12m22.918s
perl程序 -- 15m25.416s
apile 回复于:2003-08-11 14:13:19
謝謝Deathcult的測試..讓我有個參考數字..
perl編譯成binary檔時,為了讓語法簡單,
後面不知道附加了多少沒用到的C代碼,會比c
慢也是無可厚非..:)
deathcult 回复于:2003-08-11 14:13:56
第二个例子:
将ip地址字符串转化为整形,以便于比较其属于哪个网段,
简单的转化为:去掉".",除首位外不够3位的前面补0。
比如:202.108.95.43 =>; 202108095043
然后根据ip表:202108072000 2021080970111 北京
判断为北京。
要处理的文本为1200万行,每行都是一个ip地址。
c程序 -- 2m14.136s
perl编译为2进制运行 -- 5m15.805s
perl程序 -- 6m18.457s
deathcult 回复于:2003-08-11 14:21:30
引用:原帖由 "apile" 发表: 謝謝Deathcult的測試..讓我有個參考數字..
perl編譯成binary檔時,為了讓語法簡單,
後面不知道附加了多少沒用到的C代碼,會比c
慢也是無可厚非..:)
是啊,而且perlcc编译后的elf文件会很大。
文件大小:
perl程序 53
perl编译后 692120
c程序 7188
这是例子一,处理时间戳的那个程序,其实是很简单程序:
#!/usr/local/bin/perl -p
s/^\d+\.\d+/localtime $&/e;
perlcc处理后产生的c源代码,十分复杂,根本看不明白 :)
yuxq 回复于:2003-08-11 14:37:23
very good thanks!
taige 回复于:2003-08-11 15:03:28
要说执行效率,还是c啊!
所以我喜欢c
powerplane 回复于:2003-08-11 15:50:24
如果用其他c的正则表达式工具,如lex等生成的bin不知道如何呢?
白水 回复于:2003-08-12 09:49:17
2m14.136s
这个是什么意思?2秒?14秒????
lawson 回复于:2003-08-12 18:38:49
2分钟又14.136秒
gunguymadman007 回复于:2003-12-01 10:47:14
难道这世界上还有比c更快的语言么??
alinker 回复于:2004-12-11 15:54:55
汇编呀,如果还不够...机器码
引用:原帖由 "gunguymadman007"]难道这世界上还有比c更快的语言么?? 发表: :P
horsley 回复于:2005-07-07 00:14:43
引用:原帖由 "gunguymadman007"]难道这世界上还有比c更快的语言么?? 发表:
有,那就是汇编
hoowa 回复于:2005-07-09 18:09:23
有一些核心编码用C来写很合适,因为那样的成本投资值了。
不过此外的东西就会换很多技术来做了。当然也有些老板愿意提高成本完全用C写。
不过,有的时候有的设备里不支持C语言...... m某些主机(mainFrame Computer)设备尤其这样。
hh123456 回复于:2005-07-13 08:51:08
如果能再和Python/Ruby/Java比一比就好了。
每种语言都有适合使用的领域,机器速度不是唯一。谁说过,Perl 应该是你的第二语言,其它方法不行时,再用 Perl
superdoctor 回复于:2005-07-14 15:45:55
C里面数据结构也更丰富,不知道斑竹测的C程序的是不是最优法,C处理问题有时侯方法不一样效率差很多
sdsdsd 回复于:2005-07-14 20:54:58
fortran
bigluo 回复于:2005-07-15 00:25:41
在《程序设计实践》中,有好多perl和c作速度比较的例子,差不多也就是这个结果。作为解释执行语言,这个速度不错了。想想java吧,和c的差距差不多有两个数量级呢,用户也不比c的少呀。
laputa73 回复于:2006-07-28 16:14:22
因为标准c没有hash结构,所以用来作查找之类的算法会复杂和慢一些。
我的感觉,perl是第一语言,不性了再考虑其他的
nsnake 回复于:2006-08-03 17:31:47
有这个必要比较吗?
论单一数据比较,C的确是最快的
但问题是你的程序难道只是单纯的匹配比较?
动边不亮西边亮
但还是要感谢楼主告诉我们实际的效果,省去了自己做测试的精力
con 回复于:2006-08-05 01:18:27
c肯定要比perl快嘛, 但是perl应该是最快的解释语言了
在处理器发展这么快的情况下, 开发的速度比执行的速度更重要吧, 所以我一直选perl
|