Perl AnyEvent并发内部构件

Perl AnyEvent并发内部构件,perl,anyevent,event-based-programming,Perl,Anyevent,Event Based Programming,我有一个服务器,它在每个客户端连接上创建一个AnyEvent timer watcher对象,并将其添加到AnyEvent循环中 use AnyEvent; ... my $db_handle = myschema->connect(); my $w; $w = AnyEvent->timer ( interval => $interval, after => $interval, cb => sub {

我有一个服务器,它在每个客户端连接上创建一个AnyEvent timer watcher对象,并将其添加到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如何处理这个问题?它是一个接一个地执行这些回调,还是在这种情况下有某种并发机制,以便同时执行这些回调?例如,通过创建多个线程来加速必须同时执行的多个回调的执行 对于我的服务器,回调将执行数据库查找。数据库连接的数据库句柄已在事件循环外部初始化。我担心的是,如果在任何事件中存在任何并发机制,那么回调就不能同时执行,因为一个回调必须等待另一个回调完成数据库查找,并且数据库句柄是空闲的。
另外,感谢“ikegami”的回答。

任何事件都不会创建任何并发。当您调用它时,它会处理事件,例如->recv.

,正如ikegami所说,任何事件都没有并发性。任何事件循环都使您能够“异步”处理事件,因此您可以同时处理多个请求/操作/计时器,而无需同时执行代码。事件总是按顺序处理的


对于多个计时器同时过期的特定情况-依次处理每个计时器,并根据其过期时间对其进行排序,并且在每个事件循环迭代中处理所有“过期”计时器-例如,对于纯Perl实现,loop.pm的第208-213行。

如果回答了您的问题,在回答问题的答案旁边打勾,而不是在问题上加上一句“谢谢”。欢迎来到StackOverflow!对你的参与表示礼貌的感谢。答案没有得到回答,你可以更具体地回答问题中提出的问题。当有人感谢你时,我认为这样评论是不礼貌的,尤其是在你的第一反应是写评论而不是回答之后,即先自学。啊,我没有注意到更新的这一部分。问题没有实质性的补充。唯一提到的一个问题是,如果存在并发性,就会有一个问题,因此我不知道如何比说没有并发性更具体。我不确定向网站的新用户指出当他未能遵循预期行为时网站如何运行有什么不礼貌。1.在问题中包括感谢是不可取的。2.应该使用适当的工具将问题标记为已回答,而不是感谢用户的回答。