Perl Ausführungsgeschwindigkeit

Alles, was Perl betrifft, kann hier besprochen werden.

Perl Ausführungsgeschwindigkeit

Postby nemesis » 03. January 2003 19:54

Hoi leutz

Code: Select all
#!usr/bin/perl
# pi-zahlen umformatieren, dax@free.de

$infile="pi_512million.txt";
$outfile="pi_512million_2.txt";

open(DATEIN,"<$infile");
open(DATAUS,">$outfile");

while ($line=<DATEIN>) {
   next if ($line=~/^\s*$/);
   $line=~s/\s+//g;
   ($line)=($line=~m/(.*):\d+$/);
   print DATAUS $line;
}

close(DATAUS);
close(DATEIN);


Das script da oben, arbeitet recht schnell, über 1mbyte/sec

der grund, warum ich es einsetzte, platz ;)
eingabedatei hat 673mbyte platzverbrauch (706.387.968bytes)
und die ausgegebene datei "nur" 488mbyte. Also genau die 512.000.000 Bytes (stellen) von pi die ich eigentlich nur haben will.

So, nun meine frage, da ja Perl an und für sich eine Interpretersprache ist, ähnlich wie Php. Müsste doch ein Kompiliertes C Programm schneller sein, oder nicht? Bzw, gibt es Tricks unter Perl, das ich den Server anweise nur die eine Operation im Moment auszuführen.
User avatar
nemesis
AF Moderator
 
Posts: 999
Joined: 29. December 2002 13:14
Location: Ingolstadt

Postby Oswald » 07. January 2003 18:56

Hallo nemesis,

Jepp. C-Programme sind in der Regel schneller als alles andere. Dabei spielt es keine Rolle ob es Perl, PHP oder was auch immer ist.

Allerdings sind C-Programme auch schwieriger zu schreiben. Dein Perl-Programm in C zu programmieren dürfte schon einige Stunden für einen ungeübten Programmierer bedeuten. Du verwendest Reguar Expressions und die in C zu programmieren ist kein Spaß. ;)

Ich denke auch das der Geschwindigkeitsgewinn bei dem Programm nicht so besonders groß sein wird, da das Programm wenig "selbst" tut. Das schwierigste was es macht sind die Regular Expressions und die wurden in Perl schliesslich auch in C implementiert. Das wird wahrscheinlich(!) nicht viel rauszuholen sein.

Falls Du es aber mal in C versuchen solltest: Du hast meine E-Mail-Adresse falls Du hilfe brauchst... ;)

Liebe Grüße,
Oswald
User avatar
Oswald
Apache Friends
 
Posts: 2718
Joined: 26. December 2002 19:51
Location: Berlin, Germany
XAMPP Version: 5.5.19
Operating System: Linux

Postby nemesis » 08. January 2003 01:09

Hi Kai,

das perl aus c, awk, sed usw, hab leider jetzt nicht alles im kopf hervorgegangen ist hab ich vor kurzem auch erst erfahren...

Hab mehr oder weniger durch zufall beim rumschaun aufm linuxrechner nen bin gefunden, nice, oder wie der name war, damit kann man nem Programm mehr Prioritäten zuweißen, -19 ist glaube ich die höchste, und 20 oda so die niedrigste. vielleicht könnte man ja so das Perlscript schneller ausführen lassen.

Gruss, nemesis
User avatar
nemesis
AF Moderator
 
Posts: 999
Joined: 29. December 2002 13:14
Location: Ingolstadt

Postby Oswald » 08. January 2003 09:12

Hallo nemesis!

Ja nice (bzw. renice) gibt es und damit setzt du den nice value (Nettigkeitswert) für Prozesse. Je kleiner der Wert desto unnetter der Prozess und desto höher die Priorität. Deswegen bedeutet -20 auch ein schneller Prozess und +19 ein langsamer Prozess.

Schnell und langsam sind aber in diesem Fall sehr relativ zu betrachten. Du wirst damit Dein Programm nicht wirklich beschleunigen können. Der nice value wird nur dann bedeutend wenn es mehrere Prozesse auf Deinem System gibt, die viel Last erzeugen. Dann entscheidet der nice value wer mehr CPU-Zeit bekommt. Wenn es aber eh nur den einen Prozess gibt, dann kriegt der schon alle CPU-Zeit und so kannst Du ihn mit nice nicht schneller machen.

Ui.. hoffe das war jetzt verständlich... ;)

Grüße,
Oswald ;)
User avatar
Oswald
Apache Friends
 
Posts: 2718
Joined: 26. December 2002 19:51
Location: Berlin, Germany
XAMPP Version: 5.5.19
Operating System: Linux

Postby nemesis » 08. January 2003 13:10

schade :( naja sshd läuft noch nebenbei während ich auf das ergebnis warte ;)
User avatar
nemesis
AF Moderator
 
Posts: 999
Joined: 29. December 2002 13:14
Location: Ingolstadt


Return to Perl

Who is online

Users browsing this forum: No registered users and 0 guests