クライアント接続ごとに「AnyEventタイマー」ウォッチャーオブジェクトを作成するサーバーがあります(AnyEventループに追加します)。
use AnyEvent;
...
my $db_handle = myschema->connect();
my $w; $w = AnyEvent->timer (
interval => $interval,
after => $interval,
cb => sub {
## Remove from loop on some condition
unless ( $ret = _check_session($sid) ) {
undef $w;
}
## Execute main logic
$db_handle->lookup($sid);
}
);
...
したがって、コールバックは $interval 秒ごとに実行されます。多くのクライアントがある場合、いくつかのコールバックを同時に実行する必要があります。AnyEvent はこれをどのように処理しますか? それらのコールバックを次々に実行しますか、またはこの場合、これらのコールバックが同時に実行されるように、何らかの並行性メカニズムがありますか? (たとえば、複数のスレッドを作成することにより、同時に実行する必要がある複数のコールバックの実行を高速化するため)
私のサーバーの場合、コールバックはデータベース ルックアップを実行します。データベース接続のデータベース ハンドルがイベント ループの外で初期化されました。私の懸念は、AnyEvent に同時実行メカニズムがある場合、1 つのコールバックが別のコールバックがデータベース ルックアップを終了してデータベース ハンドルが解放されるまで待機する必要があるため、コールバックを同時に実行できないことです。
PS答えてくれた「池上」に感謝します。