send/recv/begin/end 对于 AnyEvent 的 condvar 意味着什么?

new*_*erl 4 perl

尽管我读过几个例子,但我不知道这意味着什么:

#!/usr/bin/perl
use strict;
use AnyEvent;

my $cv = AnyEvent->condvar( cb => sub {
    warn "done";
});

for my $i (1..10) {
    $cv->begin;
    my $w; $w = AnyEvent->timer(after => $i, cb => sub {
    warn "finished timer $i";
    undef $w;
    $cv->end;
    });
}

$cv->recv;
Run Code Online (Sandbox Code Playgroud)

谁能更详细地解释一下是什么send/recv/begin/end

更新

my $i = 1;
my $s = sub {
    print $i;
};
my $i = 10;
$s->();  # 1
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 5

在您提供的代码中, condvar 是为了防止程序过早退出。如果没有recv,程序将在任何计时器有机会触发之前结束。使用 时recv,所有十个计时器都必须在返回之前触发recv

recvsend如果从未被调用过,则会阻塞。当被调用时它会解锁send

begin并且end是使用 的替代方法sendend当调用次数与调用次数一样多时begin,就会send发生。

任何事件