Concurrency and Coordination Runtime(CCR)は、Microsoftが提供するロボット制御開発環境、Microsoft Robotics Developer Studio (MRDS) に含まれる非同期プログラミングライブラリです。このライブラリは、
.NET Frameworkを基盤としており、並行処理と協調動作を効率的に実装するための機能を提供します。
CCRは、MRDSの一部として提供されていますが、その利用はロボット制御に限定されません。一般的なアプリケーションにおける非同期処理のニーズにも対応でき、幅広い開発シーンで活用可能です。特に、
Erlangというプログラミング言語から大きな影響を受けており、用語は異なるものの、基本的な概念やアプローチは
Erlangの並行処理モデルと共通する部分が多く見られます。
CCRの中核となるのは、Dispatcherクラスです。これは、固定数のスレッドで構成されるスレッドプールを実装しており、並行処理の実行環境を提供します。各Dispatcherには、DispatcherQueueというプロシージャのエントリポイントを示すデリゲートのキューが存在します。このキューは、分散処理の対象となる作業項目の一覧を保持しており、これらの作業項目は、スレッドプール内の実行スレッドに分散され、非同期に実行されます。
さらに、Dispatcherオブジェクトは、作業項目の実行結果を格納するための汎用ポートと呼ばれるキューも備えています。このポートは、非同期処理の結果を効率的に受け渡すための仕組みを提供します。各作業項目は、処理結果を消費するReceiverTaskオブジェクトに関連付けることができ、このReceiverTaskオブジェクトによって、非同期処理の結果を適切なタイミングで処理することが可能になります。
Arbiterは、ReceiverTaskを管理する役割を担います。Arbiterは、ReceiverTaskが処理の準備が整ったかどうかを監視し、準備が完了したReceiverTaskをPortのキューに登録します。これにより、非同期処理の結果が生成された際に、それらの結果を待っているReceiverTaskが自動的に起動されるようになります。このメカニズムによって、複雑な非同期処理の連携をシンプルかつ効率的に実装することができます。
CCRは、非同期プログラミングにおける複雑さを抽象化し、開発者が並行処理や協調動作を容易に実装できるようにするための強力なツールです。ロボット制御だけでなく、イベント駆動型アプリケーションや並行処理を必要とする様々なアプリケーション開発において、その有効性を発揮します。
関連技術
Task Parallel Library: .NET Frameworkで提供される並列処理ライブラリ。CCRと同様に並行処理を扱うが、よりタスクベースのアプローチを採用。
Joins (concurrency library): 並行処理におけるジョインパターンを扱うライブラリ。CCRのArbiterと共通する部分もある。
Erlang: CCRの設計思想に大きな影響を与えた並行プログラミング言語。
参考文献
CCR: MSDN Magazine
CCR: Channel9 Interview
CCR and DSS Toolkit 2008 homepage
* Concurrency and Coordination Runtime MSDN Documentation