併發與協調運行時(Concurrency and Coordination Runtime)是一個可以從任意.net 2.0程序語言進行訪問的託管代碼庫。

CCR解決了面向服務應用(service-oriented applications)對管理異步操作、處理併發、利用並行硬件和處理部分失敗(partial failure)的需求。它使得你設計的應用的軟件模塊或組件之間可以鬆耦合;這樣就可以讓它們可以被獨立的開發,且對運行環境和其它組件做最小的假設。這種方法從流程設計起點、用統一的方式處理併發、失敗和隔離方面改變了用户對程序的認識。

問題領域

異步

當鬆耦合的軟件組件之間進行通訊時,例如:跨越網絡運行的程序、UI代碼與用户輸入或者文件IO進行通訊,異步操作使得程序有更好的可伸縮性、更好地響應能力以及跨越多個操作處理失敗。然而由於異步編程經常把邏輯分離到多個啓動操作的代碼和一些“回調”中,所以常常被認為降低了用户代碼的可讀性。同時,跨越多個未完成的操作來正確處理的處理失敗幾乎是不可能任務。

併發

需要更好利用多執行資源的代碼必須分離成多個獨立的邏輯段,以便可以並行的運行,然後當需要的時候互相通訊,將執行組合起來得到處理結果。邏輯段是一個長週期的迭代,常常被操作系統的線程原語執行。由於線程的性能問題主要在線程啓動時,線程長時間處於活動狀態,迫使一個特別的模式:代碼被構造成一個很長的由阻塞操作和同步調用構成的序列,同一時刻只能處理一件事情。此外,線程間通訊的主要方式是共享內存,這迫使程序員必須使用顯式的(explicit)方法來同步對共享內存的訪問,不幸的是這些同步方法很容易被誤用。

協調和失敗處理

在大型軟件程序中,協調多個組件是最複雜的工作。一個交互模式(調用對象的方法 vs 使用操作系統的信號原語 vs 使用隊列+信號)的錯誤會導致不可讀的代碼,運行時行為在協調方式間急劇的變化。更重要的是,錯誤處理方法是模糊不清又變化巨大的。

應用模型

CCR適用的應用模型是:多個組件分離到可以只通過消息交互的塊。組件在這個模型中需要在消息之間進行協調,處理複雜的失敗場景並且高效的處理異步編程。這個編程模型與如何組裝各種不同的硬件和如何構建網絡應用非常類似。從傳統的客户端PC程序到服務端應用再到運行在瀏覽器中的applets,大多數軟件程序有類似的需求。軟件需要等待用户輸入,存儲的輸入輸出和UI展現。儘管隱藏在大多數同步API層中,但是由於設備的速度不同和在資源可用性上的巨大差異,異步是不可避免的,並且我們都知道如何用隊列來隔離異步。

CCR以高效、穩定和可擴展的方式解決了上面的這些問題,接下來的幾節將介紹CCR編程模型和它的實現。