2012年12月12日水曜日

ゆるふわScalaプログラミング・振り返り(6)

振り返り(5)では:

  • 可変分離⇔並行プログラミング
  • 不変⇔並列プログラミング

の組合せの中で「可変分離⇔並行プログラミング」について考えてみました。

不変⇔並列プログラミング

並列プログラミングの場合、リソースの更新は必須ではありませんから、可能な限り「不変」戦略を取りたいところです。

「不変」戦略による並列プログラミングの手法として以下のものが考えられます。

  • 並列コレクション
  • フューチャー・モナド

使い方が簡単なのは並列コレクションです。この場合、並列コレクションに対してmapコンビネータなどを用いて関数を合成してく形になります。しかし、この方法では、mapコンビネータを多段に結合した場合に各段毎に同期が発生してしまうために、並列度に制約が出てしまうという問題があります。

このあたりの問題はScalazの以下のスライドが詳しいです。

そこで、より本格的な並列プログラミングの基盤として期待したいのがフューチャー・モナドです。上のスライドにあるようにScalaz 6系ではPromiseモナドとして提供されています。Scala 2.10では、同等機能がFutureモナドとして基本ライブラリで提供されるので、本記事ではフューチャー・モナドと呼ぶことにします。

そこで、スライドの以下のページになります。



フューチャー・モナド(ScalazのPromiseモナド)を使って、並列プログラミングした場合の動作時間と並列動作の概念図を4ページを使って説明しています。ここで重要なのは、フューチャー・モナドの使い方はOptionモナドやListモナドといった他のモナドと全く同じでよいということです。普通にモナドを使ったMonadicプログラミングをしておけば、モナドとしてをフューチャー・モナドを使うことで、自動的に並列プログラミングになるわけです。

0 件のコメント:

コメントを投稿