AnyEvent equivalent to Event var watcher?



我使用Event var监视器来实现内部队列。当生产者线程向队列中添加内容(只是一个数组)时,它将改变一个被监视变量的值,以表明添加了一个元素。

如何对AnyEvent做同样的事情?它似乎不支持变量观看。我是否必须使用管道并使用IO监视器(即生产者在添加元素时在管道的一端写入一个字节)

我也有兴趣知道如何做到这与Coro

听起来好像您正在使用变量监视作为将控制权转移回消费者的手段。在AnyEvent中,这可以通过从生产者调用$cv->send()和在消费者调用$cv->recv()来完成条件变量。您可以考虑将原本放在队列中的项目发送给send(),但是不带参数地调用send应该是通知消费者的一种允许的方式。

我找到了要使用的范例:

my @queue;
my $queue_watcher;
sub add_item {
   push(@queue, $_[0]);
   $queue_watcher ||= AnyEvent->timer(after => 0, cb => &process_queue);
}
sub process_queue {
  ... # remove zero or more elements from @queue
  if (@queue) {
    $queue_watcher = AnyEvent->timer(after => 0, cb => &process_queue);
  } else {
    undef $queue_watcher;
  }
}

当且仅当@queue不为空时,$queue_watcher被定义并激活。

相关内容

  • 没有找到相关文章

最新更新