Transcript
Parallel Extensions in .Net 4.0
Dmytro Maleev for Lviv .Net User Group
Agenda
Куда катится мир? Hello, Parallel Extensions! Parallel vs Multithreading Parallel Loops Tasks PLINQ CDS & Thread Enchantments References Q&A
Куда катится мир
1998 Intel 80486
80Mhz1 Core
2000Celeron 400Mhz
1 Core
2003Athlon XP 1.6+GHz
1 Core
2007Core 2 Duo 2.13 GHz
2 Core
2010Intel i5 3.3GHz
2 Core 4 Threads
?
Forget about CPU frequency increase!
There are a lot of issues with this, which will be
fixed in future!
Куда катится мир
For now…ENLARGE YOUR…
CPU CORE COUNT!PENPEN
Hello, Parallel Extensions!
Parallel Extensions, previously known as the Parallel Framework Extensions or PFX, is a managed concurrency library being developed by a collaboration between Microsoft Research and the CLR team at Microsoft. It is composed of two parts: Parallel LINQ (PLINQ) andTask Parallel Library (TPL).It also consists of a set of coordination data structures (CDS) – sets of data structures used to synchronize and co-ordinate the execution of concurrent tasks.The library was released as a CTP on November 29, 2007 and refreshed again in December 2007 and June 2008. Microsoft has announced that the Parallel Extensions to .NET will release as part of the .NET 4.0 Framework release.
©Wikipedia
Hello, Parallel Extensions!
Visual Studio Debugging and profiling support
Task Scheduler
PLINQ
Task Parallel Library
CDS
Parallel Extensions
Parallel vs Multithreading
Multithreaded!=parallelization
“ If on a single core machine you are using threads and it makes perfect sense for your scenario, then you are not "doing parallelism", you are just doing multithreading”
”On a single core you can use threads and you can have concurrency, but to achieve
parallelism on a multi-core box you have to identify in your code the exploitable
concurrency: the portions of your code that can truly run at the same time.”
Daniel Moth
Parallel vs Multithreading
Dark Side of Paprallelization and Multithreading
1. Race conditionshttp://en.wikipedia.org/wiki/Race_condition
2. Deadlockshttp://en.wikipedia.org/wiki/Deadlockhttp://en.wikipedia.org/wiki/Dining_philosophers_problem
3. Thread starvation4. Difficult to code and debug5. Environmental
Народная мудрость!
Parallel Loops
Parallel.For() Parallel.For(0, 100, i => { Console.WriteLine("This is I-I-I-I-I-I: {0}", i); });
Parallel.ForEach()Parallel.ForEach(ThisIsCollection, collectionItem =>
{collectionItem.Hello();
});
Parallel Options Parallel.Invoke()
Parallel Loops. Use Force wisely!
Parallelization Can Hurt Performance
http://msdn.microsoft.com/en-us/library/dd560853(VS.100).aspxhttp://en.wikipedia.org/wiki/Context_switch
DEMO
AntiSocial Robots
Task - Task Scheduler
Task is a new class that represents the work you want completed. There are methods to create, schedule, and synchronize tasks in your application.
Tasks are controlled by task scheduler. Tasks scheduler works with thread pool.
Task In Deep
Tasks can: Task can be created Task can wait! Task can simply Wait(), WaitAll() or
WaitAny(). Task knows when it is completed ( IsCompleted
property) Task can ContinueWith() Task can return value Task has Options and Status
Demo
Strassen algorithm
PLINQ
PLINQ is just parallelized version of LINQ
Not parallelized: LINQ-to-SQL & LINQ-to-Entity.
LINQ:var query = from s in someCollectionlet result = CoolService.CallService(s)select result;
PLINQ:var query = from s in someCollection.AsParallel()let result = CoolService.CallService(s)select result;
PLINQ. How it works?
PLINQ. Overview
Ordering Results AsOrdered()
ForAll Operator() AsSequential() WithMergeOptions Parallel Performance Analyzer. Just
for rich
DEMO
Baby Names
CDS & Thread Enchantments
Thread Enchantments: Thread.Yield() Monitor.Enter()
Concurrent Collections ConcurrentStack (LIFO) ConcurrentQueue (FIFO) ConcurrentDictionary ConcurrentBag BlockingCollection
Synchronization Primitives
Barrier“Let’s meet near monument and then go
to have a beer” Cancellation Tokens CountDownEvent ManualResetEventSlim and
SemaphoreSlim SpinLock ThreadLocal<T>
References
Parallel Programming with .NEThttp://blogs.msdn.com/b/pfxteam/
Wikihttp://
en.wikipedia.org/wiki/Parallel_Extensions Introducing .NET 4.0
http://www.amazon.com/Introducing-NET-4-0-Visual-Experts/dp/143022455X
Lviv .Net User Grouphttp://dotnetug-lviv.blogspot.com/
Q&A
?
If you still have a questions
Mail me:diwingless@gmail.com
Skype me:hmmidma
Twitter:dimko1
top related