het asynchrone microsoft landschap

32
Het Asynchrone Microsoft Landschap Kees Dijk Senior Software Developer, Vivens [email protected] http://www.vivens.com http://blog.softwarefun.nl @KeesDijk

Upload: jena-wall

Post on 03-Jan-2016

36 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Het Asynchrone Microsoft  Landschap

Het Asynchrone Microsoft Landschap

Kees DijkSenior Software Developer, Vivens

[email protected]://www.vivens.comhttp://blog.softwarefun.nl@KeesDijk

Page 2: Het Asynchrone Microsoft  Landschap

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

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

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

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

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

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

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

Threads

Show Code

Page 10: Het Asynchrone Microsoft  Landschap

Tasks (TPL)

• Simplify model• Generics• Composition• Schedulers• Smarter

Page 11: Het Asynchrone Microsoft  Landschap

Tasks (TPL)

• Tasks• TaskFactory• Parallel.Invoke• Parallel.For• Parallel.ForEach

•BlockingCollection•ConcurentBag•ConcurrentDictionary•ConcurrentStack•ConcurrentQueue

Page 12: Het Asynchrone Microsoft  Landschap

Tasks (TPL)

Show Code

Page 13: Het Asynchrone Microsoft  Landschap

Async CTP

• Async en Await keywords• Async Extensions methods• RunEx =>– Delay– Run (Action)– RunEx (Function)– …

Page 14: Het Asynchrone Microsoft  Landschap

Async CTP

Show Code

Page 15: Het Asynchrone Microsoft  Landschap

PLinq

Page 16: Het Asynchrone Microsoft  Landschap

PLinq

Show Code

Page 17: Het Asynchrone Microsoft  Landschap

TPL Dataflow

• Stephen Toub• ISourceBlock• ITargetBlock

Page 18: Het Asynchrone Microsoft  Landschap

TPL Buffer Blocks

Page 19: Het Asynchrone Microsoft  Landschap

TPL Dataflow Execution Blocks

Page 20: Het Asynchrone Microsoft  Landschap

TPL Dataflow Join Blocks

Page 21: Het Asynchrone Microsoft  Landschap

TPL Dataflow

Show Code

Page 22: Het Asynchrone Microsoft  Landschap

Reactive Extensions (Rx)

• Simplify model• Composition• Schedulers• Smarter

• Gebruik Linq• Event streams • Testbaarheid•Multiplatform

Bart de Smet

Page 23: Het Asynchrone Microsoft  Landschap

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

Reactive Extensions (Rx)

Schedulers:

Wat => Execution ContextHoe => Execution PolicyWanneer => Clock

Page 25: Het Asynchrone Microsoft  Landschap

Reactive Extensions (Rx)

Show Code

Page 26: Het Asynchrone Microsoft  Landschap

SignalR

David Fowler

Page 27: Het Asynchrone Microsoft  Landschap

SignalR

Show Code

Page 28: Het Asynchrone Microsoft  Landschap

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

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

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

Vragen [email protected]://www.vivens.comhttp://blog.softwarefun.nl@KeesDijk

Page 32: Het Asynchrone Microsoft  Landschap

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