Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12488[/thread]

times, Ablaufdauer messen

Leser: 5


<< >> 6 Einträge, 1 Seite
RalphFFM
 2008-09-13 18:26
#114605 #114605
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo, ich meine mich zu erinnern, daß das früher mal funktionierte:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
use warnings; use strict;
$|=1;
my @start = times;  # genauer als time
for (my $i=0; $i<=5; $i++) {  # irgendwas was Zeit kostet
        print ".";
        sleep 1;
}
print "\n";
my @end = times;
my @diffs = map { $end[$_] - $start[$_] } 0 .. $#end;
print "Dauer insgesamt ist @diffs";

Irgendwie, es werden immer nur noch 0en angezeigt. Wieso?
FoolAck
 2008-09-13 19:11
#114607 #114607
User since
2008-05-02
69 Artikel
BenutzerIn
[default_avatar]
Gibt times nicht den Wert zurück, wie lange der Prozess gelaufen ist im Sinne von Prozessorokkupierung? (Hab ich jetzt so verstanden...)
Ein sleep call ist ja wahrscheinlich da nicht so ressourcenverbrauchend. Ersetz den mal mit irgendwas nicht idlenden.
So zum Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env perl
use warnings; use strict;
$|++;
my @start = times;
for (1 .. 5) {
print ".";
recuridle(qw(a b c));
}
print "\n";
my @end = times;
my @diffs = map { $end[$_] - $start[$_] } 0 .. $#end;
print "Dauer insgesamt ist @diffs";


sub recuridle {
return if @_ > 100;
my @foo = @_;
return recuridle(@foo, [@foo]);
}
RalphFFM
 2008-09-13 19:30
#114608 #114608
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
@FoolAck: Das würde mir als Erklärung des Phänomens einleuchten. perdoc -f times gibt leider gerade mal zwei Zeilen her:

times Returns a four-element list giving the user and system times, in seconds, for this
process and the children of this process.


Die Berechnung von User- und System-Times bleibt bei diesem Zweizeiler unerklärt. :-(
Aber ich glaube so wie Du sagst wird es sein.
Struppi
 2008-09-13 20:38
#114613 #114613
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Was hälst du von
Code (perl): (dl )
use Time::HiRes qw(time);
RalphFFM
 2008-09-13 21:20
#114614 #114614
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo Struppi, super, funktioniert offenbar ebenfalls, und mißt die gewünschte Gesamtzeitdauer, nicht nur die Prozessorbenutzungsdauer. Und gehört angenehmerweise zu den hier standardmäßig bereits installierten Modulen.
topeg
 2008-09-13 22:44
#114616 #114616
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Die Userzeit beschreibt den Wert, in der der Prozess mit sich selber beschäftigt ist, also nicht die Zeit, die für das öffnen und lesen von Dateien (Sysetmseiteig), Zugriff auf andere Prozesse und ähnliches verbraucht werden. Systemzeit ist wiederum die Zeit, die das System (Kernel) für den Prozess aufbringen muss, damit er funktioniert. Beide addiert ist die Zeit, die der Prozess wirklich vom Prozessor abbekommen hat.

Um die echte Laufzeit heraus zu bekommen, muss man den Startzeitpunkt vom jetzigen abziehen:
Code (perl): (dl )
my $diff=$^T-time();


$^T oder $BASETIME ist die Zeit (timestamp) zu dem das Script gestartete wurde.
<< >> 6 Einträge, 1 Seite



View all threads created 2008-09-13 18:26.