Async and Parallel Programming: Application Design

Pluralsight
Course Summary
Discusses the design of asynchronous and parallel applications using the new Task-based model available in .NET 4 and Silverlight 5.
-
+
Course Description
Need to make your .NET applications more responsive? Run faster? On today's multicore hardware, async and parallel programming may be the answer. This course (part 2 of 2) discusses the safe and efficient design of asynchronous and parallel .NET applications. It builds upon the introduction provided in part 1 ("Introduction to Asynchronous and Parallel Programming in .NET 4"), offering more details into the inner workings of the Task Parallel Library, the dangers of concurrent execution, and the higher-level abstractions available in the TPL to help you. The course closes by weaving these concepts together and presenting common patterns for building fast, correct parallel software. This course is for anyone working in .NET 4 or Silverlight 5.
-
+
Course Syllabus
Understanding the Dangers of Concurrency- 1h 23m
—Introductions and Agenda 1m 52s
—The pitfalls of concurrency 1m 50s
—Correctness guarantees: safety, liveness 0m 44s
—Terminology: race conditions, critical sections 0m 54s
—Race conditions involving shared resources 3m 36s
—Demo 1: parallelizing a Logfile Search app 1m 14s
—Demo 1: source code layout 4m 26s
—Demo 1: from sequential to parallel 11m 41s
—Demo 1: summary of why it's broken 0m 18s
—Solving race conditions --- an overview 1m 0s
—Solution 1: locking 3m 57s
—Demo 2: solution using locking 3m 56s
—Solution 2: interlocking 1m 14s
—Demo 3: solution using interlocking 7m 53s
—Solution 3: lock-free 2m 14s
—Demo 4: lock-free solution 13m 35s
—The danger of shared objects 1m 55s
—Thread-safety and solutions to shared objects 2m 54s
—Demo 5: using thread-safe objects 4m 14s
—Synchronization primitives 1m 7s
—The concurrent data structures: thread-safe collections 0m 22s
—Performance lessons... 2m 21s
—Demo 6: improving performance 8m 31s
—Summary and References 1m 23sExecution Model and Types of Parallelism- 1h 4m
—Introductions and Agenda 1m 59s
—Tasks: developer's role vs. .NEt's role 0m 24s
—Execution model: high-level view 1m 29s
—Task granularity: just how lightweight? 0m 58s
—Execution model: tasks vs. threads vs. cores 2m 33s
—Custom task scheduling 0m 53s
—Additional observations regarding task scheduler 1m 35s
—Work-stealing in detail 1m 52s
—Two important assumptions: short-lived, random order 0m 50s
—Fairness option to execute tasks in order 1m 22s
—LongRunning option for tasks > 1-2 seconds 0m 45s
—Demo 1: executing 100 long-running tasks 0m 30s
—Demo 1: solution attempt with default behavior 4m 26s
—Demo 1: solution attempt with long-running option 2m 8s
—Solution for 100 long-running tasks 1m 47s
—Demo 2: proper solution in action 4m 32s
—Parallel.For = more concise solution 0m 44s
—Types of Parallelism 0m 36s
—Data parallelism 0m 52s
—Task parallelism 0m 37s
—Dataflow parallelism 2m 24s
—Embarrassingly parallel 0m 57s
—TPL support for parallelism types 0m 25s
—Parallel.For, .Foreach, .Invoke 2m 44s
—Structured (fork-join) parallelism 1m 7s
—Demo 3: Mandelbrot app overview 1m 11s
—Demo 3: sequential version 1m 57s
—Demo 3: Parallel.For version 6m 38s
—Data partitioning 2m 15s
—Custom data partitioning 2m 28s
—Exception handling with Parallel class 0m 41s
—Breaking out of a Parallel loop 1m 26s
—Cancelling a Parallel loop 1m 40s
—Demo 4: Mandelbrot app with cancellation 5m 50s
—Summary and References 1m 44sDesigns and Patterns for Parallel Programming- 1h 17m