• 差分
  • リロード
  • 一覧
  • 最終更新のRSS

イベント駆動プログラミングに関連するPerlモジュールメモ

AnyEvent

AnyEvent::FIFO

Async::Queue

  • http://search.cpan.org/perldoc?Async%3A%3AQueue
  • AnyEvent::FIFOと同様、非同期ジョブを並列度制限しながら実行する
  • ただし、AnyEvent::FIFOは基本的に複数の異なる非同期処理をFIFO実行するようになっているが、 Async::Queueはあらかじめ登録した一つの非同期処理を(引数を変えながら)何度も実行するといったユースケースを想定している。
  • ぶっちゃけ、async.jsのqueueオブジェクトのパクり

AnyEvent::Debounce

  • http://search.cpan.org/~jrockway/AnyEvent-Debounce/
  • 時間的に近い複数のイベントをまとめて一つのイベントとして扱い、コールバックをキックする。
  • TCPのdelayed ACKのようなことをやりたい時に便利そう。

AnyEvent::Retry

AnyEvent::Tools

  • http://search.cpan.org/~unera/AnyEvent-Tools/
  • 非同期ルーチンのmutex, object pool, forループ, bufferなど。
  • object poolは複数のobjectを複数の非同期ルーチンで取り合う場合に使う。 うまく使えばセマフォも実現できそう。
  • bufferは任意のデータを蓄積するキューバッファ。 flushを手動でトリガするか、自動トリガがかかるかするとbuffer内のデータがコールバックに渡される。 AnyEvent::Debounceに近い動作も実現できそう。

AnyEvent::Worker

Test::AnyEvent::Time

Async::Hooks

  • http://search.cpan.org/~melo/Async-Hooks/
  • 複数の非同期コールを束ねて逐次実行するオブジェクト。
  • オブジェクトにフックを登録するときに使える。
  • 逐次実行を開始する際には引数とコールバックを与えることができ、それぞれの非同期コールに同じ引数が与えられる。
  • 全ての非同期コールが終了するとコールバックが呼ばれる。途中で非同期コールチェーンの実行をスキップしてコールバックを呼ぶこともできる。

Async::Defer

  • http://search.cpan.org/~powerman/Async-Defer/
  • 複数の非同期コールを束ねて逐次実行するオブジェクト。
  • 単に上から下に実行するだけではなく、非同期コールのif分岐、whileループ、try/catchによる例外処理なんかをサポート。
  • Async::Deferオブジェクトの入れ子も可能。
  • 入れ子にした複数のAsync::Deferオブジェクトの並列実行も可能。
  • 「複数の非同期コールを〜〜する」系のタスクはこれ一つでたいていの用事がすみそうな気がする。
  • ただし条件分岐を本格的にやりだすとコードがかなり複雑化する。

Async::MergePoint

Async::Group

  • http://search.cpan.org/~ddumont/Async-Group/
  • 複数の非同期コールを並列(同時)実行し、全て終了したタイミングでコールバックを実行する。
  • 各非同期コールの結果は集約されてコールバックに渡される。
  • 集約のやり方は、(1)結果のlogical AND, (2)結果の文字列結合 のいずれかもしくは両方のみなので、汎用性は低い。

Combinator

  • http://search.cpan.org/~cindy/Combinator/
  • 複数の非同期コールを逐次実行する。
  • 最大の特徴はソースフィルタリングを使っており、DSLっぽく非同期コールのチェーンを記述する点。
  • 簡単な繰り返し処理もサポート。

Object::Event

Event::Notify

Notification::Center

Class::Publisher

Object::Deferred

  • http://search.cpan.org/dist/Object-Deferred/
  • CommonJSのpromise API実装らしい。
  • then()メソッドで成功(resolved)コールバックと失敗(rejected)コールバックを登録。
  • コールバックは複数登録できそう。
  • resolve()メソッドで成功をシグナル、reject()メソッドで失敗をシグナル。すると対応するコールバックが実行される。
  • シグナル済みのオブジェクトにthen()メソッドでコールバックを登録すると即座に起動。

Data::Monad::CondVar

Async::Util

CPS

  • http://search.cpan.org/perldoc?CPS
  • CPS(Continuation Passing Style)によるプログラミングを支援する各種関数群を定義。
  • Continuation Passingによるループ、木構造トラバース、逐次・並列実行など
  • イベント駆動プログラムと相性がいい

CPS::Functional

Future

  • http://search.cpan.org/perldoc?Future
  • jQueryのDeferredオブジェクトに似たオブジェクト。よって前述のObject::Deferredとも似てる
  • on_done()メソッドで成功時コールバックを登録、on_fail()メソッドで失敗時コールバックを登録。
  • コールバックは複数登録できる。
  • on_ready()メソッドで成功・失敗に関わらず実行されるコールバックを登録。
  • done()メソッドで成功状態に変更し、成功時コールバックを実行。fail()メソッドで失敗状態に変更し、失敗時コールバックを実行。
  • cancel()メソッドが呼ばれると、あらかじめon_cancel()メソッドで登録されたルーチンが起動。実行中の処理を中断するために使える。
Last-modified: 2012-11-23 (金) 11:27:11 (4164d)