タグ

coroに関するnanoliaのブックマーク (5)

  • Coroを使って並行処理 - JPerl Advent Calendar 2009

    こんにちわ。『層・圏・トポス』読者の会からの刺客、id:hirataraです。 「並行処理」って言葉はなんだか魅力的ですよね! そこで、今日はCoroを使った並行処理を紹介します。なお、Coroはコアモジュールではありませんので、使ってみたい場合にはCPANからインストールして下さい。 スレッドを作る Coroでは、asyncによって新しいスレッドを作ることができます。ただし、asyncでスレッドを作っても、何もしなければ他のスレッドに勝手に処理が移ることはありません。asyncで作成した別のスレッドに制御を移すには、明示的な操作が必要となります。ここではcedeを使って、asyncブロックへ処理を移しましょう。 use strict; use warnings; use Coro; async { print "Another thread\n"; }; print "main thre

  • Coro と Go で並列実行数の制御 - 酒日記 はてな支店

    http://d.hatena.ne.jp/tokuhirom/20090710/1247196134 この Coro の例を Go でやってみます。 まず特定数 (ここでは 3) の worker thread を立ち上げておいて、そこにメッセージを送って仕事させるモデル。メッセージのやりとりに Coro::Channel を使います。 use Coro; use Coro::Channel; use Coro::Timer; my $ch = Coro::Channel->new; sub worker { while (1) { my $url = $ch->get; printf("worker(%d): %s\n", $_[0], $url); Coro::Timer::sleep(1); } } my @coros = ( async { worker(1) }, async

    Coro と Go で並列実行数の制御 - 酒日記 はてな支店
  • Coro で Executor/CompletionService - はこべにっき ♨

    Java並行処理プログラミング ―その「基盤」と「最新API」を究める― をぱらぱらめくっていて出てきた、以下二つをCoroで実装してみた。 並行処理タスクの実行方法を抽象化した Executor タスクの生成とその消費を分離する CompletionService 実装とか例とかぺたぺた貼ってたらすごい長くなっちった。 gistにもあります > http://gist.github.com/191924 。 まとめ (長いので先に結論) ExecutorやCompletionServiceのようなパターンにそってプログラムをかくと、すっきりと並行処理プログラムを構成できて良い感じ。Coroでも簡単に実装できる。 これまでやられたことに名前を付けただけという話もあるけど、名前をつけて区別して理解しておくと、コード読むときの思考が整理されて良いとおもう。 Executor Executorと

    Coro で Executor/CompletionService - はこべにっき ♨
    nanolia
    nanolia 2009/10/17
  • おさかなラボ - 非同期の簡単なクローラの作り方

    そろそろ(いまさら)Coro+AnyEventでもやってやるか!と思って簡単な並列クローラを作ることにしたのだが、ググって出てくるサンプルを見てもいまひとつうまく動いてくれない。 で、そういえばYAPC::Asia 2009でmala.さんがAnyEvent::HTTPを使うとこんなに簡単にできるよ!と言っていたので、スライドの通りにやってみた。 use AnyEvent::HTTP; sub done { print @_; } http_get ("http://www.example.com/“, \&done); # 1 http_get (”http://www.example.com/“, \&done); # 2 http_get (”http://www.example.com/“, \&done); # 3 –mala氏 main.txtから引用。 こ

  • CoroでFlickrにアクセスする - D-6 [相変わらず根無し]

    CoroでFlickrにアクセスする もうずいぶん前からCoroを使いたくて使いたくてしょうがなかったのだが、やっときたよ。Flickr APIを叩いて、非同期I/OしながらCoroで写真の情報をダウンロードするよ! まず某sukebeさん作のWebService::Simpleを使ってみるよ(当に使ったコードは違うフレームワーク用にいろいろついてたので、あまり利便性とか考えずに説明用のコードだけ書きだします) package MyFlickrModel; use strict; use WebService::Simple; my $webservice = WebService::Simple->new( \%必要な引数 ); # 写真のIDを渡すとinfo, context, sizes, permsを全部ひっぱってくる sub find_photo { my $class =

  • 1