Thread Seltsamer Effekt beim Dateieinlesen (31 answers)
Opened by marky at 2011-09-26 11:25

topeg
 2011-09-26 22:00
#152699 #152699
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Unter Windows würde wirklich aus Probleme mit dem Datendurchsatz setzen. Gerade XP ist dabei nicht besonders gut. Aber ich hätte nicht gedacht, dass es so extrem ausfallen kann.

Bei Linux könnte es mit der Kernelversion zusammenhängen. In den Letzten fünf Versionen hat sich einiges getan was die Caches betrifft. Hier kann es auch zu ungünstigen Wartezyklen kommen. Die Anzahl der Kerne ist nicht so wichtig, da Perl als ein Prozess läuft. Viel mehr kommt es hier auf den Speicherdurchsatz und den Prozessortakt an.

Um zu zeigen dass es nicht an Perl liegt.
In dem Benchmark wird nur mit dem IO-Layer von Perl gearbeitet
(setzt perl 5.8 voraus):
Code (perl): (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
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark qw(cmpthese);

my $file='test.txt';
my $file_size=1*1024*1024; # 1MB
my $iter=1000;

my $data='';
{
  my $lines=int($file_size/81);

  print "create DATA ($lines lines and 81 chars per Line)\n";
  for(1..$lines)
  {
    $data.=join('',map{chr(int(rand(94))+32)}(1..80)).$/;
  }

  my $diff=$file_size-($lines*81);
  while($diff>0)
  {
    $data.=chr(int(rand(95))+32);
    $diff--;
  }
}

print "set FileHandle\n";
open(my $gfh, '<', \$data) or die("DATA : $!\n");

print "Run Benchmark\n";
cmpthese($iter, {
'read_all' => sub{
    # goto start
    seek($gfh,0,0);

    my @l=<$gfh>;
  },
'read_push' => sub{
    # goto start
    seek($gfh,0,0);

    my @l;
    while(<$gfh>)
    { push(@l,$_); }
  },

});


Das Ergebnis zeigt dass es kaum einen unterschied gibt:
Code: (dl )
1
2
3
4
5
6
create DATA (12945 lines and 81 chars per Line)
set FileHandle
Run Benchmark
Rate read_push read_all
read_push 80.7/s -- -2%
read_all 82.0/s 2% --


Sollte bei dir was anderes heraus kommen könnte Perl ein Problem mit der Codeoptimierung haben. (ich nutze bei mir gerade 5.10)

View full thread Seltsamer Effekt beim Dateieinlesen