折腾了很久的stackless python和greenlet,
突然想到,难道万能的perl就没有协程的实现吗?
众里寻他千百度,
度娘了一下,还真有,就是 Coro - the only real threads in perl
T_T,我怎么能忘了CPAN呢。
coro基本提供了和stackless一样的功能。
同一个作者还提供了libEV,anyevent模块来支持异步的事件接口。
先看看anyevent:HTTP抓网页的coro版实现
少了cv.少了回调函数。
只是多了async
非常简洁
use Coro;
use AnyEvent::HTTP;
#my $url = 'http://www.baidu.com/s?wd=1';
my $url = 'http://www.baidu.com';
my $cocurrent = 5; # 并发数
my @coro;
foreach my $i (1..$cocurrent){
push @coro, async {
#print "start $i\n";
http_get $url, cb => Coro::rouse_cb;
my ($content, $hdr) = Coro::rouse_wait;
print "end $i($hdr->{Status})\n";
};
};
foreach (@coro) {
print "joining\n";
$_->join;
print "joined\n";
};