Hitta kursen för dig

Parallel och Asynchronous Programmering i 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.

  • .NET
  • C#

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.


parallel_async.png

"Very good with meaningful examples and excerices, the effort is really appreciated!"


Detta kommer du att lära dig

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

Kursinformation

Kurskod: T331
Kurslängd: 3 dagar
Pris: 25 900 SEK
Språk: Engelska

Kursschema

Malmö
17 decBoka nu
18 mar 2019Boka nu

Lärare

Dela

Kontakta oss för mer information

040 61 70 720
info@edument.se


Alla priser är exkl. moms