某オブジェクトストレージでデータをお引っ越し中な話 2011年9月30日 09:25 D | ブログ記事のURL | コメント(0) | トラックバック(0) 目的:オブジェクトストレージの旧ストレージサーバーから新ストレージサーバーにデータを引っ越しすること。rsyncやディスク... 続きを読む
イベントドリブンなプログラミングをする際の文脈で言うと、Coroはコーディングスタイルを変化させる(させない)モジュールという意味合いが強いと思う。I/Oにまつわる処理をしないならCoroはタダのコルーチンの実装で、内部でAnyEventが呼ばれることは無い。 An... 続きを読む
あるいは、継続 + I/O多重化によるアプリケーションの並列化は何故重要であるのか。 Coroは非常に重要なモジュールだ。そのことを明確にしておきたい。AnyEventは非常に良く出来たPOEの代替手段かもしれないが、Coroはもっと別の価値を提供するものだ(パラダイ... 続きを読む
http://d.hatena.ne.jp/tokuhirom/20090710/1247196134 この Coro の例を Go でやってみます。まず特定数 (ここでは 3) の worker thread を立ち上げておいて、そこにメッセージを送って仕事させるモデル。メッセージのやりとりに Coro::Channel を使います。 u... 続きを読む
Coroでクローラ書くときはCoro::Semaphoreを使うと便利です。 http://search.cpan.org/dist/Coro/Coro/Semaphore.pm Coro::Semaphore->new($num)でリソースの制限数を指定しておきます。$semaphore->downできないと、そこでcoroが停止して別のcoroに処理が移り... 続きを読む
perl以前に、なお、(2)でフロントエンドの処理を書く時は(0)のバックエンドとは逆に、AnyEventは直接使わない方が無難だと思います。理由は、AnyEventのイベントループからはCoroの層の関数が使えないからです。Coro::AnyEventでフロントエンドをコールバックを... 続きを読む
perlCoro::AnyEventを使うと、継続渡しスタイルを使わずに非同期を書くことができます*1。ということで、試しにやってみました。最初にまとめAnyEventの層を作り、その上にCoroの層を重ねて、フロントエンドからはCoroの層だけ使うとわかりやすいアプリができる... 続きを読む
こんにちわ。『層・圏・トポス』読者の会からの刺客、id:hirataraです。 「並行処理」って言葉はなんだか魅力的ですよね! そこで、今日はCoroを使った並行処理を紹介します。なお、Coroはコアモジュールではありませんので、使ってみたい場合にはCPANからイン... 続きを読む
# this is pseuedo code.use case: web crawlerhow to control the number of active sockets?worker-thread model with Coro::Channelワーカースレッドをあらかじめ起動して常駐させておき、外部から仕事をあたえる。スレッドの数が固定なんで、スレッドの起... 続きを読む
空前の非同期ブームが襲来した 2009 年でしたけれども、ぼくは Coro をほぼスルー、後で勉強しよう後で勉強しようとか思って結局勉強しなかったクソでした。このままではマズい。死ぬ。そういうわけで、新幹線の中でちょっと Perldoc 読んでた。何がよくわかっ... 続きを読む
前回のエントリでは簡単なクローラの作り方を説明した。しかしこのクローラには欠点があり、取得したいURLが何千何万とある場合、一度にhttp_getが走ってしまい、リソースを使い切ったり同じサーバーへのアクセスを待つ間にタイムアウトしたりと都合が悪かった... 続きを読む
Coroが非同期にルーチンを扱う(コルーチンを扱う)モジュールだということはご存知だと思うが、いまいちピンと来ていない人も多いのではないだろうか。これは、1つにCoroやCoro::Introの例題が悪すぎると思う。例えば、Coro::Introのサンプルスクリプトはこう... 続きを読む
PSGI/Plackで非同期 Web ServerをCoroで use Plack::Request; use HTTP::Request; use Data::Dumper; use Coro; use Coro::AnyEvent; use Coro::LWP; use LWP::UserAgent; my $hanlder = sub { my $env = shift; my $req = Plack::Request->new($env); my $cv =... 続きを読む