Subscribed unsubscribe Subscribe Subscribe

AnyEventとかCoroとかがいまだに理解できていない

イベント駆動とか非同期とかについてもう少し分かるようになりたい、と幾つか目を通してみたのだけど、読むだけではやっぱりよく分からない。
とりあえず何か書いてみた。

#!/opt/local/bin/perl
use strict;
use warnings;

use Coro;
use Coro::AnyEvent;

my $cv = AnyEvent->condvar;
async {
    my $count = 0;
    until (++$count > 30) {
        Coro::AnyEvent::sleep rand(0.5);
        print $Coro::current, " : $count\n";
        cede;
    }
    $cv->send;
};
async {
    while (1) {
        print $Coro::current, "\n";
        Coro::AnyEvent::sleep 1;
        cede;
    }
};

$cv->recv;
$ ./coro.pl 
Coro=HASH(0x85ab68)
Coro=HASH(0x85019c) : 1
Coro=HASH(0x85019c) : 2
Coro=HASH(0x85019c) : 3
Coro=HASH(0x85019c) : 4
Coro=HASH(0x85019c) : 5
Coro=HASH(0x85ab68)
Coro=HASH(0x85019c) : 6
Coro=HASH(0x85019c) : 7
Coro=HASH(0x85019c) : 8
Coro=HASH(0x85019c) : 9
Coro=HASH(0x85019c) : 10
Coro=HASH(0x85019c) : 11
Coro=HASH(0x85019c) : 12
Coro=HASH(0x85ab68)
Coro=HASH(0x85019c) : 13
Coro=HASH(0x85019c) : 14
Coro=HASH(0x85ab68)
Coro=HASH(0x85019c) : 15
Coro=HASH(0x85019c) : 16
Coro=HASH(0x85019c) : 17
Coro=HASH(0x85019c) : 18
Coro=HASH(0x85019c) : 19
Coro=HASH(0x85019c) : 20
Coro=HASH(0x85ab68)
Coro=HASH(0x85019c) : 21
Coro=HASH(0x85019c) : 22
Coro=HASH(0x85019c) : 23
Coro=HASH(0x85019c) : 24
Coro=HASH(0x85ab68)
Coro=HASH(0x85019c) : 25
Coro=HASH(0x85019c) : 26
Coro=HASH(0x85019c) : 27
Coro=HASH(0x85ab68)
Coro=HASH(0x85019c) : 28
Coro=HASH(0x85019c) : 29
Coro=HASH(0x85019c) : 30

とりあえず非同期に動いているっぽい。
もうちょっと色々やってみよう。。


これが一番わかりやすく解説されている気がした。
第13回 AnyEvent:イベント駆動モジュールの方言を吸収する:モダンPerlの世界へようこそ|gihyo.jp … 技術評論社