work.log

元エンジニアの備忘録的ブログ

Coro::Channelでスレッド間のデータ送受信のメモ

投稿:2014-04-04 17:04  更新:

Coro のメモ書き。

Coro で作成したスレッド間でデータの送受信を行うには Coro::Channel が便利。

#!/usr/bin/perl

use strict;
use warnings;
use Coro;

    my @msg = (
           '1 message',
           '2 message',
           '3 message',
       );

    my $ch = Coro::Channel->new;

    async {
        while ( my $msg = $ch->get ) {
            print "receive: $msg\n";
        }
    };

    for my $msg (@msg) {
        print "send: $msg\n";
        $ch->put($msg);
    }

    schedule;

put で渡して get で受信といった具合に使える。get は put でデータが送られてくるまで待つのでブロッキングとしても使えるようです。

実行結果はこんな感じ。

send: 1 message
send: 2 message
send: 3 message
receive: 1 message
receive: 2 message
receive: 3 message