Thread flock funktioniert nicht (64 answers)
Opened by x-man at 2006-04-17 19:11

master
 2006-04-19 10:44
#7387 #7387
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
sysopen, sysseek, syswrite vs. open, seek, print

Folgendes Ergebnis:

Zeit: 34 #sys-methode
Zeit: 40 #normal
----
Syswrite usw.  waren  16 %  schneller


hier der neuste test-code mit grösserem seek-bereich:
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
use Fcntl;
use FindBin qw($Bin); chdir($Bin);

my $Datei = $Bin.'/a.txt';


$run = 10000;


$t = time;

for(1..$run)
{
    sysopen(DATEI, $Datei, O_WRONLY | O_CREAT | O_TURNC) || die "$Datei: $!";
    sysseek(DATEI, 100000, 0);
    syswrite(DATEI,"TEST");    
   close(DATEI);
}
$t = time - $t; print "Zeit: $t \n";

$t = time;
for (1..$run)
{
    open(DATEI2, ">$Datei" ) || die "$Datei: $!";
    seek(DATEI2, 100000, 0);
    print DATEI2 "TEST";
   close(DATEI2);
}
$t = time - $t; print "Zeit: $t \n";


Resultat:
Zeit: 10   #sys
Zeit: 41  #normal

Nun ist die sys-methode 4 mal schneller als normales open.
besonder fatal wirkt es sich mit seek aus. je höher der seek wert, desto schlechter steht das normale seek usw. da.

Im normal fall wird eine datei ja nicht einfach nur geöffnet.. und gleich wieder geschlossen, sondern es passiert ja noch was damit.

"sysopen" gewinnt also klar gegen "open"
zudem wird durch turncate.. die Datei jedesmal auf 0 Zurückgesetzt.  Ein normales löschen zuvor würde es denke ich noch beschleunigen.

also müsste beim open-beispiel ebenfalls turncate noch mit rein. und dann steht open usw. noch schlechter dar...

ps. gab schon einen Grund warum ich mich für sysopen entschieden habe :-)\n\n

<!--EDIT|master|1145429215-->
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;

View full thread flock funktioniert nicht