我有一个服务器,它在每个客户端连接上创建一个“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 中有任何并发机制,那么回调不能同时执行,因为一个回调必须等到另一个回调完成数据库查找并且数据库句柄空闲。
PS感谢'ikegami'的回答。