Co je rychlejsi ?

Honza Pazdziora adelton na fi.muni.cz
Úterý Březen 31 10:22:41 MEST 1998


jvajda na somi.sk (Jan ' Kozo ' Vajda) writes:

> :> Chtel bych se jen zeptat, co je rychlejsi z nasledujicich dvou porovnani:
> :> if (($text eq 'neco') or ($text eq 'neco1')) {}
> :> if ($text =~ /^neco$|^neco1$/) {}
> :> nebo je jeste neco rychlejsiho?
> :> P.S. Kdyby to bylo i vysvetleno proc, byl bych moc rad.
> 
> a co tak pozriet sa do mudrych knih, pripadne si to prehnat cez benchmarky ?

Ten benchmark je asi fakt nejjednodussi a protoze nekoho muze zajimat,
jak se to v Perlu dela, tak posilam priklad skriptu i vysledek:

use Benchmark;
timethese(15000, {
	"eq" => sub { my $a = "jezek";
		 if ($a eq "krtek" or $a eq "lama") { print "1\n"; }},
	"reg" => sub { my $a = "jezek";
		if ($a =~ /^krtek$|^lama$/) { print "1\n"; }},
	"reg2" => sub { my $a = "jezek";
		if ($a =~ /^(krtek|lama)$/) { print "1\n"; }}
	});
__END__
Benchmark: timing 15000 iterations of eq, reg, reg2...
        eq:  2 secs ( 0.75 usr  0.01 sys =  0.76 cpu)
       reg:  4 secs ( 1.45 usr  0.01 sys =  1.46 cpu)
      reg2:  3 secs ( 1.12 usr  0.00 sys =  1.12 cpu)

je vysledek z Indy R4600,

Benchmark: timing 150000 iterations of eq, reg, reg2...
        eq:  2 secs ( 1.61 usr  0.00 sys =  1.61 cpu)
       reg:  2 secs ( 2.78 usr  0.00 sys =  2.78 cpu)
      reg2:  3 secs ( 2.07 usr  0.00 sys =  2.07 cpu)

z UltraSparcu 170 a

Benchmark: timing 150000 iterations of eq, reg, reg2...
        eq:  2 secs ( 1.06 usr  0.00 sys =  1.06 cpu)
       reg:  1 secs ( 1.94 usr  0.00 sys =  1.94 cpu)
      reg2:  3 secs ( 1.18 usr  0.00 sys =  1.18 cpu)

Pentium Pro 200.

Cili porovnani pomoci eq je rychlejsi, ale zase ne o tolik, takze
pokud to porovnani udelate jednou na zacatku skriptu, tak je asi
nelepsi pouzit ten posledni pripad, protoze je to nejcitelnejsi.

Pro uplnost posilam i vysledky pro situaci, kdy $a = "lama":

Benchmark: timing 15000 iterations of eq, reg, reg2...
        eq:  3 secs ( 0.93 usr -0.01 sys =  0.92 cpu)
       reg:  4 secs ( 1.49 usr  0.01 sys =  1.50 cpu)
      reg2:  4 secs ( 1.77 usr  0.01 sys =  1.78 cpu)

Benchmark: timing 150000 iterations of eq, reg, reg2...
        eq:  1 secs ( 2.17 usr  0.00 sys =  2.17 cpu)
       reg:  1 secs ( 2.37 usr  0.00 sys =  2.37 cpu)
      reg2:  2 secs ( 2.64 usr  0.00 sys =  2.64 cpu)

Benchmark: timing 150000 iterations of eq, reg, reg2...
        eq:  2 secs ( 1.32 usr  0.00 sys =  1.32 cpu)
       reg:  3 secs ( 1.71 usr  0.00 sys =  1.71 cpu)
      reg2:  3 secs ( 2.14 usr  0.00 sys =  2.14 cpu)

cili je videt, zda zalezi na tom, zda ocekavate kladny nebo zaporny
vysledek.

Doufam, ze to pomuze,

--
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
                   I can take or leave it if I please
------------------------------------------------------------------------


Další informace o konferenci Perl