BT

関数型プログラミングとCoordination Data Structures

| 作者: Jonathan Allen フォローする 593 人のフォロワー , 翻訳者 菅野 裕 フォローする 0 人のフォロワー 投稿日 2009年3月30日. 推定読書時間: 2 分 |

Coordination Data Structures (CDS) は.NET 4で計画されている新しいAPIであり、スレッドセーフなオブジェクトや主にコレクションを扱うものだ。そのCDSに、およそ6ヶ月の沈黙を経ていくつかの大きな更新があった。もっとも注目に値するのは関数型プログラミングの手法が導入されたことだ。これによってデザインパターンを使う必要性が軽減される。

最初の新しいクラスはConcurrentLinkedListだ。ConcurrentLinkedListはTryInsertBetweenメソッドでノードの挿入をスレッドセーフに行うのに述語関数を使う。述語関数はそのオブジェクト自身から正しい位置を決めるために呼ばれ、そのクラスを普通の LinkedListよりも、たとえシングルスレッドだとしてもより使いやすくする。
 

関数型の手法が使われている別の箇所はSpinWaitオブジェクトだ。開発者は手作業でループを書いてSpinOnceを繰り返し呼び出す必要はなくなり、SpinWait.SpinUntilに述語関数を渡せばよくなるのだ。

次に取り上げるのは新しい型、ConcurrentBagだ。これはキューのコレクションのようなものだがスレッド間でロードバランスしてくれる。普段は各スレッドは自身のキューを読み書きする。しかしキューが空の場合には、これは他のスレッドのキューからアイテムを取ってくる。つまりほとんど常に、スレッド間の競合が出ることもなく、しかも仕事がある分だけ各スレッドが全力で働くことができるわけだ。ConcurrentBagは ConcurrentQueueの置き換えではない。ConcurrentQueueは依然として単一の生産者、単一の消費者という状況では向いている。
 

WriteOnce クラスは取り除かれた。これは特別興味を惹く機能ではなく、セッターが1回より多く呼ばれると例外を投げるオブジェクトにすぎなかった。もっと有用な LazyとLazyVariableクラスは残された。どちらも遅延初期化をサポートするもので、Futureとしても知られている。前者はクラスベース、後者は軽量だが若干安全性が落ちる構造体である。他には、メモリ使用量が問題となるときに使えるLazyInitializer、型安全にスレッドローカルのストレージとFutureを組み合わせるためのThreadLocalが加わった。

スレッドを止めることなくタスクをキャンセルできるかどうかは依然として重要な課題だ。このキャンセルのサポートのためのオーバーロードが、ブロック可能なすべてのメソッドに追加された。 Microsoftはこのキャンセルのモデルが至るところで利用できるように努めており、これによってライブラリ開発が非常にシンプルになるだろう。

 

より詳しい情報はMicrosoftのParallel Programmingブログ(リンク)および私たちのCDSについての記事(参考記事・英語)を参照してほしい。
 

 

原文はこちらです:http://www.infoq.com/news/2009/03/CDS-March

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT