het asynchrone microsoft landschap
DESCRIPTION
Het Asynchrone Microsoft Landschap. Kees Dijk Senior Software Developer, Vivens. [email protected] http://www.vivens.com http:// blog.softwarefun.nl @ KeesDijk. Agenda. Wat is wat Introductie. Task Parallel Library. Threads Tasks (TPL) Async CTP. Plinq TPL Dataflow Rx SignalR. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/1.jpg)
Het Asynchrone Microsoft Landschap
Kees DijkSenior Software Developer, Vivens
[email protected]://www.vivens.comhttp://blog.softwarefun.nl@KeesDijk
![Page 2: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/2.jpg)
Agenda
• Threads• Tasks (TPL)• Async CTP
Task Parallel Library
• Plinq• TPL Dataflow• Rx• SignalR
• Wat is wat• Introductie
• Conclusie• Vragen
![Page 3: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/3.jpg)
Wat is wat
• Parallel– Gelijktijdig uitvoeren van taken– Performance
• Asynchroon– Niet wachten op uitvoering van taken– Reactieve gebruikers interface– Schaalbaarheid
![Page 4: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/4.jpg)
Wat is wat
• Thread– De .Net 1.0 - 3.5 manier van werken– Een context waarbinnen code draait– Low level
• Task– De .Net 4.0 - … manier van werken– Wrapper rond Thread – Gebruik threadpool geoptimaliseerd voor aantal
cores
![Page 5: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/5.jpg)
Introductie - Geschiedenis
• .net 1.0 => Threads APM (2001)• .net 2.0 => Threads EAP (2005)• .net 4.0 => Task Parallel Library (2010)– PLinq– Async CTP (async, await)– TPL DataFlow
• .net 4.5 => (2012)– Async as a language feature– Numerous improvements
• 15 augustus 2012 Rx v2.0 (2011)• 22 augustus 2012 SignalR 0.5.3 (2011)
![Page 6: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/6.jpg)
Introductie - Uitdagingen
• Shared resources• Show progress• Cancellation• Exception handling• Thread affinity• Complexity• Debugging• Deadlocks / Race conditions / Heisenbugs• Applicability• Unit testing
![Page 7: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/7.jpg)
Introductie - Demo omgeving
• VS 2010• .Net 4.0• Async CTP (version 3) • TPL Dataflow• Reactive Extensions
2.0• SignalR 0.5.3
• Nuget (package restore)• Autofac 2.6• xUnit 1.9.1• Moq 4.0• Fluent Assertions 1.7• Resharper 7.0• xUnit plugin for
Resharper• StyleCop 4.7.35.0 • Asp.Net MVC 4.0
![Page 8: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/8.jpg)
Threads
Standaard Thread patterns
• APM => Asynchronous Programming Model• BeginRead, EndRead (a.k.a. IAsyncResult pattern)
• EAP => Event-Based Asynchronous Programming• DownloadStringAsync, DownloadStringCompleted• Geschikt voor UI
![Page 9: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/9.jpg)
Threads
Show Code
![Page 10: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/10.jpg)
Tasks (TPL)
• Simplify model• Generics• Composition• Schedulers• Smarter
![Page 11: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/11.jpg)
Tasks (TPL)
• Tasks• TaskFactory• Parallel.Invoke• Parallel.For• Parallel.ForEach
•BlockingCollection•ConcurentBag•ConcurrentDictionary•ConcurrentStack•ConcurrentQueue
![Page 12: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/12.jpg)
Tasks (TPL)
Show Code
![Page 13: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/13.jpg)
Async CTP
• Async en Await keywords• Async Extensions methods• RunEx =>– Delay– Run (Action)– RunEx (Function)– …
![Page 14: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/14.jpg)
Async CTP
Show Code
![Page 15: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/15.jpg)
PLinq
![Page 16: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/16.jpg)
PLinq
Show Code
![Page 17: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/17.jpg)
TPL Dataflow
• Stephen Toub• ISourceBlock• ITargetBlock
![Page 18: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/18.jpg)
TPL Buffer Blocks
![Page 19: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/19.jpg)
TPL Dataflow Execution Blocks
![Page 20: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/20.jpg)
TPL Dataflow Join Blocks
![Page 21: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/21.jpg)
TPL Dataflow
Show Code
![Page 22: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/22.jpg)
Reactive Extensions (Rx)
• Simplify model• Composition• Schedulers• Smarter
• Gebruik Linq• Event streams • Testbaarheid•Multiplatform
Bart de Smet
![Page 23: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/23.jpg)
Reactive Extensions (Rx)
Rx = Observables + Linq + Schedulerspublic interface IObservable<out T> { IDisposable Subscribe(IObserver<T> observer); }
public interface IObserver<in T> { void OnNext(T value); void OnError(Exception error); void OnCompleted(); }
OnNext* [OnError | OnCompleted]
![Page 24: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/24.jpg)
Reactive Extensions (Rx)
Schedulers:
Wat => Execution ContextHoe => Execution PolicyWanneer => Clock
![Page 25: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/25.jpg)
Reactive Extensions (Rx)
Show Code
![Page 26: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/26.jpg)
SignalR
David Fowler
![Page 27: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/27.jpg)
SignalR
Show Code
![Page 28: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/28.jpg)
Unit testen
• In VS 2010 met xUnit 1.9.1 support voor async await
• In VS 2010 mstest eigen Async Context maken (voorbeeld in async samples/unit test)
• In VS 2012 mstest support voor async await• Rx heeft testschedulers (time travel)
• TypeMock racer (betaald)• Chess (tot vs 2008)
![Page 29: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/29.jpg)
Conclusies - Uitdagingen
• Shared resources• Show progress• Cancellation• Exception handling• Thread affinity• Complexity• Debugging• Deadlocks / Race conditions / Heisenbugs• Unit testing
![Page 30: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/30.jpg)
Conclusies
• Think before you leap (is het echt nodig)• Meet • APM en EAP : zelf niet meer implementeren• TPL + Async : Default keuze • Plinq : In memory Linq querys met
bewerkingen per rij • TPL Dataflow : producer/consumer meerdere
bewerkingen achter elkaar• Rx : event streams, maar kan veel,
hoge leercurve• SignalR : client/server publish/subscribe
communicatie
![Page 31: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/31.jpg)
Vragen [email protected]://www.vivens.comhttp://blog.softwarefun.nl@KeesDijk
![Page 32: Het Asynchrone Microsoft Landschap](https://reader034.vdocuments.net/reader034/viewer/2022051018/56813592550346895d9d01d5/html5/thumbnails/32.jpg)
ReferentiesAsyncDemohttps://github.com/KeesDijk/AsyncDemo
Parallel programminghttp://tinyurl.com/pp-on-msdn
TPLhttp://tinyurl.com/tpl-book
TPL Dataflowhttp://msdn.microsoft.com/en-us/devlabs/gg585582.aspx
Rxhttp://msdn.microsoft.com/en-us/data/gg577609.aspx
SignalRhttps://github.com/SignalR/SignalR
Plinqhttp://msdn.microsoft.com/en-us/library/dd460688.aspx