URN Logo
UNIX Resources » Linux » China Linux Forum » Perl 编 程 » 2 » perl 脚本循环效率还是比较慢
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
perl 脚本循环效率还是比较慢
perl 脚本循环效率还是比较慢 - jazz [2005-04-29 12:28 | 2,476 byte(s)]
 
Re: perl 脚本循环效率还是比较慢 - fgh [2005-05-18 16:45 | 315 byte(s)]
 
Re: perl 脚本循环效率还是比较慢 - ACp [2005-04-29 17:52 | 23 byte(s)]
 
Re: perl 脚本循环效率还是比较慢 - jazz [2005-04-30 02:19 | 1,012 byte(s)]
 
Re: perl 脚本循环效率还是比较慢 - hyacinth [2005-05-11 20:59 | 491 byte(s)]
 
Re: perl 脚本循环效率还是比较慢 - Qiang [2005-04-30 10:19 | 564 byte(s)]
 
Re: perl 脚本循环效率还是比较慢 - Viperii [2005-04-30 09:01 | 89 byte(s)]
 
Re: perl 脚本循环效率还是比较慢 - jazz [2005-05-01 03:12 | 195 byte(s)]
 
Subject: perl 脚本循环效率还是比较慢
Author: jazz    Posted: 2005-04-29 12:28    Length: 2,476 byte(s)
[Original] [Print] [Top]
简单的循环1百万次,比了一下各种语言的效率,
试了用vb, vb script, c#, perl script, inline C 结果如下

机器配置T42 centrino 1.4G

vb 100ms
vbscript 1370ms
c# 10ms
perlscript 550ms
inline C 1-2ms

perl除了比vbscript要快一些,比其它几种都要慢好多

代码如下:
---------perl----------------------------------------
use Time::HiRes qw(time gettimeofday);

my $msec=time;

my $t=0;
my $cnt=1_000_000;

for(my $i=0;$i<$cnt;$i++)
{
$t=$t+$i;
}
my $msec2=time;

print "loop for $cnt times takes ",($msec2-$msec)*1000,"ms";

--------C#------------------------------------
using System;
using System.Runtime.InteropServices;

class Test
{
[DllImport("kernel32.dll")]
public static extern int GetTickCount();
public static void Main()
{
long t1=GetTickCount();
long a=0;
long num=1000000;
for(int i=0;i<num;i++){
a=a+i;
}

long d=GetTickCount()-t1;
Console.Write("loop for {0:d} times takes {1:d} ms",num,d);

}
}

#-------------------------VBScript ------------------------------------------------------
t1=timer
num=1000000
aa=0
for i=1 to num
aa=aa+i
next
t2=timer-t1

wscript.echo "loop " + cstr(num) + " times takes" & cstr(t2*1000) & " ms"

#-----------------------inline C-----------------------------------------------
use Inline C;
my $cnt=10_000_000; #NOTE! its ten million times

print "loop for $cnt times takes ",test($cnt),"ms";

__END__

__C__

#include <windows.h>
long test(int cnt)
{
DWORD t1=GetTickCount();
DWORD g=0;
int i;
for(i=0;i<cnt;i++){
g+=i;
}
return GetTickCount()-t1;

}
[Original] [Print] [Top]
Subject: Re: perl 脚本循环效率还是比较慢
Author: ACp    Posted: 2005-04-29 17:52    Length: 23 byte(s)
[Original] [Print] [Top]
这样的比较是没有意义的.
----
OnlyPc
[Original] [Print] [Top]
Subject: Re: perl 脚本循环效率还是比较慢
Author: jazz    Posted: 2005-04-30 02:19    Length: 1,012 byte(s)
[Original] [Print] [Top]
我觉得还是蛮有意义,记得曾经作过一个perl下载流文件的cgi--循环的输入缓冲里的数据,后来改用asp的ADO.Stream来写,在局域网中快了好几倍.两个的区别是明显的,就象上述的比较一样,perl是解释执行,而ado.stream或VB编译出的com对象都是本地机器代码.

开发效率是一方面,语言本身的效率也是一个重要方面, 因为一个项目里大多数人不是语言的高手.如果想让自已的程序跑快点,处理数据多点,还是有必要对它有了解的.

虽有perlcc能把perl编译成本地代码或伪代码,但其提高的效率实在不敢恭维. activestate公司有一款perl的编译器,可惜不是免费的,也一直懒得去try.

perl从脚本出身,历史悠久,功能强大广泛,但也有先天的不足--不是强类型的一个语言,以至难于优化编译形成较快的机器代码.

看到C#和C的效率几乎接近,不得不感慨它的编译做的真好.而它比C要强--支持自身反射--更接近脚本或java才有的功能.

但还不是太坏,好在还有perl Inline C/Java.和XS...不算太难学.

最近因为作一些linux上的应用,重新捡回perl,用得一直不多,一点点感受,还要多多指教.


[Original] [Print] [Top]
Subject: Re: perl 脚本循环效率还是比较慢
Author: Viperii    Posted: 2005-04-30 09:01    Length: 89 byte(s)
[Original] [Print] [Top]
你这是win32测试吧,我在Linux kernel 2.6.11/Perl 5.8.4上运行,CPU比你的差,但速度却比你快.
----
Where is the RED pill? I want OUT!
[Original] [Print] [Top]
Subject: Re: perl 脚本循环效率还是比较慢
Author: Qiang    Posted: 2005-04-30 10:19    Length: 564 byte(s)
[Original] [Print] [Top]
你说的很多都有道理。

语言本身的效率确实是个重要方面。但要看情况来决定我们是否在意。

如果用 perl 来做一个项目花较短的时间 (CPAN etc..),速度要求不是那么高。 那还有什么原因不用 perl 呢?

如果你要求特别的速度,那就把花最多时间的地方用 inline::C 写。

不过很多时候程序速度问题很大方面是程序设计问题, 算法问题。与语言本身实在是没有多大关系。

另外, 如果你的 loop 用 perl 形式的 loop 来写 而不是 C 类,速度会快些 ( perl 会想办法提速 )

for my $i (0..$cnt)
----
http://wiki.perlchina.org Perl 文章翻译
[Original] [Print] [Top]
Subject: Re: perl 脚本循环效率还是比较慢
Author: jazz    Posted: 2005-05-01 03:12    Length: 195 byte(s)
[Original] [Print] [Top]
是的.刚在linux下试了下,确实快点:

kernel 2.6.11.6
perl 5.8.6

c 类型的loop要~400ms
(0..$cnt)类型~320ms

多谢楼上各位指点
[Original] [Print] [Top]
Subject: Re: perl 脚本循环效率还是比较慢
Author: hyacinth    Posted: 2005-05-11 20:59    Length: 491 byte(s)
[Original] [Print] [Top]
这样比较没有意义。
传统CGI是没有容器的概念的,每个CGI都是一个新进程。
新的CGI技术(JSP/PHP等)都有容器的概念,这样,容器就大大提高了CGI运行的性能。
ASP based的技术自带了容器,所以当然比标准CGI快,甚至比C写的CGI更快,这也是当年M$把我骗到ASP阵营的原因。

很快我发现我错了,试试mod_perl+apache worker或者fastcgi,重新测试一下性能对比,你就知道了。

当然,这里只提到性能,还不涉及开发和部署的成本,在那些方面perl的优势就更加明显了。
[Original] [Print] [Top]
Subject: Re: perl 脚本循环效率还是比较慢
Author: fgh    Posted: 2005-05-18 16:45    Length: 315 byte(s)
[Original] [Print] [Top]
用VB及Perl同时编写一个Base64编/解码程序,对一个几百K以上的文件进行编/解码看看谁更快?
象一般的循环什么的,当然Perl会慢一些,但Perl的特点是有大量非常有效地完成各种工作的模块,所以工作起来速度一点都不慢,要写有效的程序要靠你不断地发现。VB也是一样,很多时候也不会比VC慢多少,程序的好赖就看你怎写了。
[Original] [Print] [Top]
« Previous thread
Cookie Question ?
Perl 编 程
2
Next thread »
关于正则表达式语法
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 04:08:55, cost 0.06029200553894 ms.