« 2005年01月15日 | メイン | 2005年01月17日 »
2005年01月16日
alarm と time
繰り返し演算にタイムアウト処理を加えたいときがある。具体的には、クローラーが select で内容を受け取っているようなときかな。ずっと待ち続けるのもありだけど、まぁ。それなりの時間でタイムアウトするのが良い。
タイムアウトの方法には、純粋に alarm を使う方法と、スタート時間と今の時間を比べるような方法がある。現時点での実装では、なぜか後者を採用したのだが、ふと前者の実装の方がよいかも。と思った次第である。というか、実装時には、前者が思い浮かばなかった。それは eval と alarm をあまり使用しないからだと思う。まぁ。いいや。
単純なプログラムで、結果を比べてみた。
alarm.pl
#!/usr/bin/perl
use strict;
my $i;
eval {
$SIG{'ALRM'} = sub {
last;
};
alarm 5;
while (1) {
$i++;
}
alarm 0;
};
print $i . "\n";
exit;
timer.pl
#!/usr/bin/perl
use strict;
my ($start, $i);
$start = time;
while (5 >= time - $start) {
$i++;
}
print $i . "\n";
exit;
time の結果だけでは面白くないので、ループを何回まわったかも数えることにした。タイムアウトは 5秒 とした。5秒という数字には特に意味が無いので、念のため。
$ time ./alarm.pl 24943828 real 0m5.007s user 0m4.450s sys 0m0.030s $ time ./timer.pl 3444813 real 0m5.044s user 0m3.270s sys 0m1.630s
結果はこんな感じ。数回試したけど、似たような結果になるので。ループの回数が1桁違うという結果になりました。実行時間は、タイムアウトを 5秒 にしているので似たようなもの。内訳は全然違いますけど。
17:31 | コメント (2) | トラックバック | Programming
やっていないこと (2)
やってないことをまとめるの続き。
データベーステーブルを分けました (2004年03月20日)
未踏の「圧縮方式高速全文検索エンジンの開発」に期待しているのだが、まだ成果が公開されていないようだし。僕が作るのは、多分無理でつ。データベースにはまったく詳しくない。
開発環境 (2004年03月20日)
引越ししたら、デスクトップマシンを1台買おうかと思ってる。でも、シンセサイザーも欲しい。どっちにしようか、、、
AlltheWeb, AltaVista が終了 (2004年03月21日)
これからは、ニュース検索、AMAZON検索、blog検索(予定)、WHOIS検索(予定)に力を入れていきたいところです。
ソフトイーサ株式会社設立 (2004年04月03日)
この logs でこんなことかいても面白くないので、後ほど役員を特集することにする。
メールは転送しよう (2004年04月29日)
大学のメールは携帯に転送してるんだけど、プライベートのは転送してなかった。これからは転送することを誓うw
アンプシステムを買った (2004年05月04日)
毎日、JAZZやクラシックをかけて、インテリな生活をするつもりw
000201.html 〜 000400.html の中からやっていないことを抽出しました。多分他にもありそうなので、他にも見つけた方は、コメント欄でご指摘ください。
次回は 000401.html 〜 000600.html の中から抽出します。
眠っているネタを掘り起こして、暇なときにつぶしていこうという計画です。
【関連記事】
・やっていないこと (1) (2005年01月13日)
15:45 | コメント (2) | トラックバック | Memo
飽きるピザ
快方に向かってるような気がします。ということで、昨日(15日)の食事内容です。
昼は、いろいろあって DONO DONO にいってきた。パスタはいまいちだったが、ピザは美味いという話なのでピザを頼む。もちろん、マルゲリータでっす。結構美味しいのだけど、量的な問題もあり途中から飽きてしまう。価格設定もアレだし。
DONO DONO (昼)
マルゲリータピザ