« 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 (昼)
 マルゲリータピザ

15:40 | コメント (0) | トラックバック | Meal