.NET Parallel Programming

All about Async/Await, System.Threading.Tasks, System.Collections.Concurrent, System.Linq, and more…

ParallelExtensionsExtras Tour – #13 – AsyncCall

(The full set of ParallelExtensionsExtras Tour posts is available here.)Producer/consumer scenarios could logically be split into two categories: those where the consumers are synchronous, blocking waiting for producers to generate data, and those where the consumers are asynchronous, such that they're alerted to data being available and only ...

Performance of Concurrent Collections in .NET 4

.NET 4 introduces new data structures designed to simplify thread-safe access to shared data, and to increase the performance and scalability of multi-threaded applications. To best take advantage of these data structures, it helps to understand their performance characteristics in different scenarios.Chunyan Song, Emad Omara and Mike Liddell ...

ParallelExtensionsExtras Tour – #12 – AsyncCache

(The full set of ParallelExtensionsExtras Tour posts is available here.)Caches are ubiquitous in computing, serving as a staple of both hardware architecture and software development.  In software, caches are often implemented as dictionaries, where some data is retrieved or computed based on a key, and then that key and its resulting ...

ParallelExtensionsExtras Tour – #9 – ObjectPool

(The full set of ParallelExtensionsExtras Tour posts is available here.) An object pool is a mechanism/pattern to avoid the repeated creation and destruction of objects.  When code is done with an object, rather than allowing it to be garbage collected (and finalized if it’s finalizable), you put the object back into ...

ParallelExtensionsExtras Tour – #8 – ReductionVariable

(The full set of ParallelExtensionsExtras Tour posts is available here.) The new .NET 4 System.Threading.ThreadLocal<T> is quite useful when you need per-thread, per-instance storage.  This is in contrast to the fast ThreadStaticAttribute, which supports only per-thread storage (in .NET 4, ThreadLocal<T> actually ...

ParallelExtensionsExtras Tour – #4 – BlockingCollectionExtensions

(The full set of ParallelExtensionsExtras Tour posts is available here.)   BlockingCollection<T> encapsulates the core synchronization and coordination necessary to enable classic producer/consumer patterns.  ParallelExtensionsExtras provides the BlockingCollectionExtensions.cs file, which contains several extension ...

FAQ :: Are all of the new concurrent collections lock-free?

(This answer is based on the .NET Framework 4.  As the details below are undocumented implementation details, they may change in future releases.)No.  All of the collections in the new System.Collections.Concurrent namespace employ lock-free techniques to some extent in order to achieve general performance benefits, but traditional ...

ConcurrentDictionary’s support for adding and updating

ConcurrentDictionary<TKey,TValue> is a new type in the .NET Framework 4, living in the System.Collections.Concurrent namespace.  As noted in the MSDN documentation, ConcurrentDictionary “represents a thread-safe collection of key-value pairs that can be accessed by multiple threads concurrently.”  While ...