[aus-dotnet] Has anyone used the CCR?


    [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
    • From: ILT
    • Subject: [aus-dotnet] Has anyone used the CCR?
    • Date: Wed, 13 Jun 2007 00:31:04 -0700

    Following on from the Joel Pobar Perth session on concurrency, I came across CCR via a message post at CodeProject.

    The CCR - Concurrency and Coordination Runtime for asynchronous processing (see here, for a description by Peter Blomberg) – may offer in the CCR.Core assembly (154Kb) some welcome help with threading and concurrency, beyond using the excellent BackgroundWorker control and a lot of brain-power for the more elaborate scenarios.

    Unfortunately to get the 154K assembly it is necessary to download 50Mb of the Microsoft Robotics Studio May 2007 CTP.

    Has anyone seen code / blog / more thorough descriptions? Or – better – used the assembly and compared its ease of use and applicability with roll-your-own management of threads and concurrency using eg the thread pool?

    Here’s a description from Bromberg’s Unblog for those that are interested.


    The central feature of the CCR is that it makes programming asynchronous behavior much simpler than the typical challenge of writing threaded code.

    When an application's thread performs synchronous I/O requests, the application is giving up control of the thread's processing to the I/O device (a hard drive, a network, etc.). The application's responsiveness then becomes unpredictable. When threads are suspended waiting for I/O requests to complete, the application tends to create more threads in an attempt to accomplish more work. The problem is that creating, scheduling, and destroying a thread requires time and memory and can actually hurt performance rather than improve it.

    The CCR offers a number of classes that provide the developer with a simple object model that you can use to express complex coordination patterns for dealing with completed I/O operations. CCR offers its own high-performance thread pool you can use to execute tasks in response to completed I/O. The thread pool offers great scalability, and when you couple the CCR with some of the new C# language features (such as anonymous methods and iterators), you have gotten an easy way to write more responsive and scalable applications.

    With the CLR's thread pool, if 1,000 items are queued, there is no way for a new item to be processed until all of the first 1,000 items have been extracted from the thread pool's queue. With the CCR you can use one DispatcherQueue object for most work items and use another DispatcherQueue object for high-priority work items. The Dispatcher's threads dequeue entries from all the DispatcherQueue objects associated with it in a round-robin fashion, making your total processing much more efficient and scalable.

    The Dispatcher class creates a Dispatcher object that creates and manages a set of threads. In effect, it is a thread pool. Like the CLR's thread pool, these threads call methods (via delegates) in order to execute tasks. Unlike the CLR's thread pool, there is no special thread that runs periodically checking the workload and trying to predict whether threads should be dynamically added or removed from the thread pool.

    After you've created a Dispatcher, you'll construct a DispatcherQueue object. This maintains a queue of delegates that identify methods ready to execute. The Dispatcher's threads wait for entries to appear in the DispatcherQueue. As entries appear, Dispatcher threads wake up and execute the methods.

    [ MORE ]


    IL Thomas
    GeoSciSoft  - Perth, Australia




    (Click here for more information on the aus-dotnet mailling list)