Parallel and Asynchronous Programming in C#


Under senare år har parallell hårdvara blivit norm. Det är inte ovanligt numera att upptäcka att ens smartphone har en multi-core CPU! Samtidigt har anrop till remote services blivit vanligare och användare har kommit att förvänta sig ett responsivt gränssnitt - båda dessa tendenser driver utvecklare mot asynkron programmering.

Tack och lov har .NET Framework och C# utvecklats för att hjälpa oss att klara av dessa nya realiteter och förväntningar. Naturligtvis har det alltid funnits lösningar - men i dag har vi många, många fler alternativ: concurrent collections, parallella loopkonstrukter, PLINQ, Tasks, de i C# 5 nya nyckelorden async/await, Reactive Extensions (Rx), biblioteket TPL Dataflow och dess Actor-baserade utveckling ... Var och en av dem är lämpliga för olika problem. Så hur vet man vad man ska använda och när, och hur man använder dem effektivt?

Det är där den här kursen kommer in. Du kommer inte bara lära dig att använda alla dessa spännande nya bibliotek. Kursen hjälper dig även att förstå vilken typ av problem vart och ett löser, så att du kan välja den lämpligaste lösningen på de utmaningar du ställs inför. Det ger också tydliga förklaringar av relevant teori och terminologi, inklusive en djupdykning ända ner till hårdvarunivån, så att du får ett fast grepp om vad som verkligen händer! Ingående övningar ger en möjlighet att prova saker själv.

Dag 1

Classifying Concurrency

  • Parallel vs. asynchronous
  • Task parallel vs. data parallel
  • CPU-bound vs. IO-bound
  • Shared vs. thread-local data
  • Blocking, lock-free, wait-free, and progress bounds

Understanding The Hardware

  • Why did CPUs go multi-core?
  • How CPU caches work with multi-core, and why it matters
  • Why thread-local storage helps
  • Why immutability helps
  • The problem of false sharing

Building Blocks

  • Threads
  • How many threads?
  • The thread pool
  • The Task abstraction

Locking

  • Monitors, the lock keyword
  • Multiple Reader, Single Writer locks
  • Deadlock
  • Lock granularity
  • The cost of locking
  • Avoiding locking

Concurrent Collections

  • What are the concurrent collections?
  • Concurrent queues, stacks, bags and dictionaries
  • The blocking collection
  • Queues and Staged Event Driven Architecture
  • Other use cases
  • Performance compared to locking the non-concurrent collections

The Parallel Class

  • Parallel for
  • Parallel foreach
  • Flow control in parallel loops
  • Keeping thread local state in parallel loops
  • Exceptions and parallel loops
  • Cancellation
  • Parallel invoke

Dag 2

Asynchronous Programming

  • Why threads aren't ideal for blocking operations
  • ContinueWith and CPS (Continuation Passing Style)
  • Why CPS transforms hurt, and how async/await help
  • Exploring the new Async methods in .Net 4.5
  • Task combinators

More On Asynchrony

  • Understanding synchronization contexts
  • Cancellation
  • Task completion sources
  • Integrating asynchrony and parallelism

Introducing Rx

  • The Enumerable/Observable duality
  • IObserver and IObservable
  • Producing and consuming simple event streams
  • Subscription and unsubscription
  • Familiar Linq Operators, the Rx way
  • Converting enumerables to observables, and vice versa

Applying Rx

  • Using Rx with Windows Forms
  • Using Rx with WPF
  • Using Rx with async/await
  • Understanding schedulers
  • Writing tests for Rx code
  • Other useful Rx bits

Dag 3

TPL DataFlow

  • Agents and actors: the ideas behind dataflow parallelism
  • Sources, targets and propagators
  • Transforming
  • Joining
  • Batching
  • Schedulers
  • Implementing custom blocks

Parallel LINQ

  • A quick LINQ refresher
  • Using PLINQ
  • Understanding how PLINQ parallelizes queries
  • Order (non-)preservation
  • Merge options
  • Cancellation
  • Dealing with exceptions
  • Custom aggregation functions

Atomic Operations and Lock-Free Data Structures

  • The Interlocked class
  • Basic atomic operations
  • Atomic Compare And Swap (CAS)
  • How to make any data structure lock free - at a cost
  • Livelock, and the contrast with wait freedom
  • The A-B problem

Putting It All Together

  • Mapping problems to suitable concurrent mechanisms
  • Integrating approaches
  • The importance of immutability
  • Trends so far, and how the future may look

Kurskod: T331
Kurslängd: 3 dagar
Pris: 25 970 SEK

Dela



BOKA NU

Kursschema

Stockholm
2016
22-aug
29-aug
7-sep
31-okt
1-nov
30-nov

Målgrupp

Erfarna C# / .NET utvecklare som vill lära sig mer om asynkron och parallell programmering.

Förkunskaper

Väl införstådd i C#, specifikt med kunskap i generics, lambdas och LINQ. Tidigare erfarenhet av parallell och asynkron programmering är inte nödvändig.

Liknande kurser

Lärare

Eric Lavesson Analytisk och kvalitetsmedveten konsult med en passion för programmering och webbadministrering Jonathan Worthington Tacklar komplexa problem, levererar lösningar. Konsult, utbildare, talare

Kontakta oss

Kontakta oss gärna för mer information:
Tel: 040-61 70 720
info@edument.se
Alla priser ex moms