uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

Groovy用並行処理ライブラリ/DSLであるgparsのドキュメント

Groovy用の並行処理ライブラリ/DSLであるgparsのドキュメントが最新化されたようです。

http://www.gpars.org/guide/index.html

ながらくドキュメントが最新版(0.9系)に追随していなかったので、テストコードで動作を類推するしかなかったのですが、これでちゃんと勉強できるようになりました。

旧版(0.8系)との差分として言うと、

  • doAsync/eachAsyncなどが、一般にdoParallell/eachParallellなどとなった。
  • Map/Reduceが追加。これはjsr166yのPallalel Arrayを、collectParallelやfindParallelをつかうよりも効率よく処理するやりかた。
  • 明示的なFolk/JoinもGroovyなラッパーでより使いやすく。
  • SafeVariableがSafeになった(名称変更)。これはコード断片(=クロージャ)をエージェントとして送り込んでアトミックな動作の単位とするもの。

ぐらいかな。ちなみにgparsのActorはメソッド名やクラス名的にScalaのActorライブラリにとても近いもので、ドキュメントには「Scalaのそれに触発されたが今となっては遥かにその先に行ってしまったもの(The actor support in gpars were inspired by the Actors library in Scala but have meanwhile gone beyond that.)」とか書いてあります。私はScalaのライブラリを良く知らないので、これが本当かどうかはよくわかりません。Gparsで分散Actorは実行できるかどうかは私は良くわかっていません。

gparsの特徴は、多様な並行処理のモデルを選択できることにあり、前述のSafe,Actorの他にデータフロー計算に基づくDataflow、eachParallelなどで扱う並列コレクション、それとForkJoinのラッパーなどが加わった訳です。ちなみにjsr166yを用いないで、java5のconcurrentパッケージのExcecutor Serviceベースでも使えます(Asynchronizer)。