Course curriculum

  • 01

    Wstęp

    • Wprowadzenie

    • Podstawy BenchmarkDotNet

    • Demo: sharplab.io

    • Demo: ConcurrencyVisualizer

    • Demo: Parallel Stacks/Tasks

    • Zadanie domowe

  • 02

    Wątki

    • Threads

    • ThreadPool

    • Demo: Używanie ThreadPool z różnymi API

    • Demo: Używanie ThreadPool.BindHandle

    • Zadanie domowe

  • 03

    Podstawy asynchroniczności

    • Task API

    • Podstawy async-await (oraz dema)

    • Async eliding

    • ValueTask

    • Task API i async

    • Zadanie domowe

  • 04

    Asynchroniczność 2

    • Wykonanie, konteksty, scheduler

    • Sync vs async

    • Fire and forget

    • TaskCompletionSource

    • Awaitables

    • Wartości lokalne

    • Zadanie domowe

  • 05

    Asynchroniczność 3

    • Agregacja wykonania Tasków

    • IAsyncDiposable

    • IAsyncEnumerable

    • Demo: gRPC oraz IAsyncEnumerable

    • Demo: New SQL client

    • Demo: Implementacja timeoutu z WhenAny i WhenAll

    • Zadanie domowe

  • 06

    Współbieżność niskiego poziomu

    • Hardware

    • volatile

    • Demo: Używanie epok w ConcurrentQueue

    • Interlocked

    • Demo: Prosta pula z Interlocked.Exchange

    • Bariery i alignment

    • Demo: Rezerwacja zakresu bufora w Aeron.NET z Interlocked.CompareExchange

    • Zadanie domowe

  • 07

    Synchronizacja

    • Exclusive locking - część 1

    • Demo: dekompilacja locka

    • Exclusive locking - część 2

    • Demo: Nieblokujące użycie Monitor.TryEnter

    • Exclusive locking - część 3

    • Non-exclusive locking - część 1

    • Demo: Limitowanie obiektów Task z SemaphoreSlim

    • Non-exclusive locking - część 2

    • Demo: Budowa własnej puli obiektów string z ReaderWriterLock

    • Non-exclusive locking - część 3

    • Sygnały

    • Asynchroniczne mechanizmy wykluczania - część 1

    • Demo: Implementacja AsyncLock

    • Asynchroniczne mechanizmy wykluczania - część 2

    • Zadanie domowe

  • 08

    Współbieżne struktury danych

    • Podstawy

    • BlockingCollection

    • ConcurrentStack

    • Demo: Cache obiektów z ConcurrentStack

    • ConcurrentQueue

    • Demo: Pula pamięci w Kestrel ASP.NET z ConcurrentQueue

    • ConcurrentDictionary

    • Demo: Efektywny cache z użyciem ConcurrentDictionary.GetOrAdd

    • ConcurrentBag

    • Zadanie domowe

  • 09

    Nowe współbieżne struktury danych

    • Wprowadzenie

    • Pipelines

    • Demo: TcpEcho

    • Channels

    • Demo: Użycie Channel w ASP.NET Core

    • Zadanie domowe

  • 10

    Zagadnienia dodatkowe

    • IValueTaskSource z Interlocked.CompareExchange

    • IValueTaskSource bazujący na tablicy i tokenie

    • ValueTask i używanie puli w .NET 5

    • ManualResetValueTaskSourceCore

    • False Sharing

    • Demo: Hostowanie serisów z IHostBuilder, IHostedService opartych o ConcurrentQueue

    • F# async vs C# async

    • What's new in CancellationTokens for .NET 5 and beyond

    • Podsumowanie kursu

  • 11

    Webinary

    • Marc Gravell, webinar nr 1

    • Daniel Marbach, webinar nr 2

    • Steve Cleary, webinar nr 3

    • Daniel Marbach, webinar nr 4

    • Marc Gravell, webinar nr 5

    • Steve Cleary, webinar nr 6

    • Daniel Marbach, webinar nr 7