140 likes | 271 Vues
Discover the power of parallel programming in .NET with Eric De Carufel, a seasoned solution architect at Orckestra. This comprehensive guide covers the Task Parallel Library (TPL), Parallel LINQ (PLINQ), and efficient data structures designed for concurrent processing. Learn about types of parallelism, asynchronous operations, and resource sharing, along with practical examples and best practices. Enhance your software development skills to take full advantage of multi-core systems and improve user experiences. Stay ahead in the evolving landscape of technology.
E N D
Parallel Extensions A glimpse into the parallel universe By Eric De Carufel Microsoft .NET Solution Architect atOrckestra eric.decarufel@orckestra.com eric@decarufel.net http://blog.decarufel.net
Whoam’I? • Eric De Carufel is solution architect at Orckestra • Over 15 years experience in software development • Bell Canada, Centre de Rechercehd’emploi St-Denis, Fédération Québécoise de Karaté, AXA Canada Tech, Provigo (5 projects), Metro-Richelieu (2 projects), Imagina, be@com, Unipage, APLC, Viasystems, Montreal Jewish Hospital, AGTI, CCQ, Ogilvy Renault, Ivanhoé Cambridge, Microcell (Fido), Cirque du Soleil, TELUS, PSP Investment, CGI, Deutsche Bank, Orckestra, Sobeys, Jean-Coutu, Xtranormal • Started with an ADAM computer by Coleco • Working with .NET since version 1.0 • My coworkers call me .NET Jedi
Agenda • Introduction • Overview • Library Core • TPL (Task Parallel Library) • Parallel Linq (PLINQ) • Parallel Data Structures • Questions
Introduction • Why do we have to bother? • Moore’s law is over, no more free lunch • Multi cores systems will be more and more available • Type of Parallelism • Asynchronous operation (better user experience) • Data parallelism • Task parallelism • Options • Manual treading • Thread, ThreadPool, BackgroundWorkerThread • Asynchronous calls • Event driven • Problems • Resource sharing • Locking • Non-deterministic sequence of execution • Hard to debug
TaskParallel Library (TPL) • Lightweight task framework (Task) • Create(Action<T>) factorymethod • Wait, WaitAll, WaitAny to catch exception • ContinueWith to chainTaskstogether • Lazy function call • Future<T> • Task scheduler and manager • TaskManager
Parallel API • Parallel Loops • Parallel.For • Parallel.ForEach • Lazy Initialisation • LazyInit<T> • Locking • SpinWait • SpinLock • CountdownEvent
Parallel API • Standard for loop • for (inti = 0; i < N; i++){ a[i] = Compute(i);} • Parallel for loop • Parallel.For(0, N, i=>{ a[i] = Compute(i);});
Parallel Linq (PLINQ) • Parallel Query • AsParallel() • Return to sequential execution • AsSequential() • Preserve order • AsOrdered() • Order doesn’t matter • AsUnordered()
Parallel Linq (PLINQ) • var query = from c in Customers where c.Name = “Smith” select c; • var query = from c in Customers.AsParallel() where c.Name = “Smith” select c;
Parallel Data Structures • IConcurrentCollection • Add(T item) • Remove(out T item) • ConcurrentStack • Push(T item) • TryPop(out T item) • ConcurrentQueue • Enqueue(T item) • TryDequeue(out T item) • BlockingCollection • Add(T item), • Remove(out T item) • TryAdd(T item), • TryRemove(out T item)
User Mode Scheduler For Tasks CLR Thread Pool: Work-Stealing Local Queue Local Queue Global Queue … Worker Thread 1 Worker Thread p … Task 6 Task 3 Task 4 Task 1 Program Thread Task 5 Task 2
What’snext • Visual Studio 2010 • .NET Framework 4.0 • New multi cores computer (4, 16, 32, 64, …) • Think parallel! • Thread safety will save your life