Thread permutation (31 answers)
Opened by esskar at 2006-09-11 12:30

renee
 2006-09-15 11:34
#69653 #69653
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Naja, Du testest unterschiedliche Sachen. Version macht einfach ein push, um eine Vorbelegung des Arrays zu erreichen. In cnt_fast1 machst Du eine Vorbelegung mit 0 und dann überschreibst Du die Werte. Dass das langsamer ist, dürfte wohl klar sein.
map sollte man auch nicht im void-Kontext verwenden.

@Dubu: Eine Vorbelegung ist notwendig, da Thorium eine Abfrage auf == 0 macht. Ohne Vorbelegung würde es warnungen geben!

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/perl
use strict;
use warnings;

use Benchmark qw/cmpthese/;

my $lng = shift(@ARGV) || die "Usage: $0 length [-count]\n";
my $cnt = shift(@ARGV) || "-10";

cmpthese ($cnt,
{
'Version 1' => sub { push_map($lng) },
'Version 2' => sub { cnt_fast1($lng) },
'Version 3' => sub { push_for($lng) }
}
);


sub push_map
{
my $l=shift(@_);
my @arr;
map{ push(@arr,"TEST") }(0..$l);
}

sub cnt_fast1
{
my $l=shift(@_);
my @arr=("Test")x$l;
}

sub push_for
{
my $l=shift(@_);
my @arr;
push(@arr,"TEST") for(0..$l);
}


Code: (dl )
1
2
3
4
5
~/entwicklung 54> perl bench.pl 100
Rate Version 1 Version 3 Version 2
Version 1 4168/s -- -21% -53%
Version 3 5274/s 27% -- -41%
Version 2 8899/s 113% 69% --


Wie man sieht, ist die () x $length - Version die schneller als das push. Und die for-Schleife ist schneller als das map im void-Kontext
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/

View full thread permutation