人生ずっと勉強。
ITを軸としたT型人間になりたい人のブログ。
09 | 2017/10 | 11
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

perlのAnyEventを勉強中
WEB+DB PRESS vol.56 のPerl Hackers Hubを見ながら
AnyEventの勉強をしてるんですが、
コンディション変数が一体何者で、どういう仕組みなのかが
まだイマイチしっくり理解できない。
コンディション変数のsend関数って、どういう目的でどこに何を送ってるんだ一体・・・。
以下はwdpからまるまる持ってきたものだけど、
動きの流れはわかっても、なんで「そう動かす」のかがいまいちピンとこないな。
たぶんコンディション変数を理解することが鍵なのかな。
いや、そもそもイベントループについてもっと理解する必要があるのか?
recvとsendの関係がいまいちよくわからないから、多分後者の理解が必要なのか。
てかこれわからないとnode.jsのこともわかんねーな。

マニュアルになにかしら書いてあるかなぁ。
英語がんばらネバダやなぁ。

use strict;
use AnyEvent;

AnyEvent::Util::fh_nonblocking( \*STDIN, 1 );

sub read_stdin{
my $cv = AnyEvent->condvar;
print "after anyevent->condver 1\n";
my $w; $w = AnyEvent->io(
fh => \*STDIN,
poll => "r",
cb => sub{
undef $w;
print "after undef w 1\n";
my $line = ;
print "after line STDIN 1\n";
$cv->send( $line );
}
);
return $cv;
}

my $main_cv = AnyEvent->condvar;
print "after main_cv 1\n";

{
my $cv = read_stdin();
print "after read_stdin 1\n";
$cv->cb( sub{
my ($line) = $_[0]->recv;
print "after [0]->recv 1\n";
print STDERR "STDERR: got $line";
$main_cv->send;
});
}

print "before cv->recv 1\n";
$main_cv->recv;
print "after cv->recv 1\n";

$main_cv = AnyEvent->condvar;

{
my $cv = read_stdin();
$cv->cb( sub{
my ($line) = $_[0]->recv;
print STDOUT "STDOUT: got $line";
$main_cv->send;
});
}

$main_cv->recv;



スポンサーサイト


わたくし

いろいろリンク

カテゴリ

月別アーカイブ

最新記事

最新コメント

最新トラックバック

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。