in reply to Re: $SIG{'ALRM'} on FreeBSD
in thread $SIG{'ALRM'} on FreeBSD

Well, i thought the mistake is in my approach of usage of alrm signal, that's why i pasted only part where i used it. Sorry :) In fact i can't simulate that situation myself. But it happend on 3 servers already (all under freebsd) and not even on 1 from 4 under Linux.

Maybe you can suggest me another way of usage of timeout-ed operations? Means when need to limit time of execution of some subs. And limit for time smaller then second.

p.s. my "d" sub :)

sub time_stamp { my $time = shift; $time = time() if ! defined $time; my ($sec, $min, $hour, $mday, $mon, $year) = localtime($time); return sprintf("%02d:%02d:%02d %02d/%02d/%04d", $hour, $min, $sec, $mday, $mon+1, $year+1900); } sub d { print "[".time_stamp()."] ".(caller(0))[0].", "; print shift; print "\n"; }

Replies are listed 'Best First'.
Re: $SIG{'ALRM'} on FreeBSD
by jonadab (Parson) on Feb 24, 2006 at 15:48 UTC

    After some experimentation, I have concluded that on my system the resolution of select undef,undef,undef,$fractionalsecond goes down to something on the order of 1/300 of a second, give or take. This is an estimate, and I haven't done proper benchmarks, and YMMV.

    perl -e ' my $times = 5000; print "Starting: " . localtime() . "\n"; for (1..$times) { select undef,undef,undef,1/$times; } print "Done: " . localtime() . "\n"; ' Starting: Fri Feb 24 10:54:56 2006 Done: Fri Feb 24 10:55:06 2006

    About ten seconds to do 5000 iterations, would lead me to say 500 iterations per second would be the limit (on this system), but if I set $times to 300 it takes a full second or slightly more, so there's some overhead making the calculation imprecise. HTH.HAND.