Codes of the book: https://www.packtpub.com/product/hands-on-parallel-programming-with-c-8-and-net-core-3/9781789132410
- Technical requirements
- Preparing for multi-core computing
- Scenarios where parallel programming can come in handy
- Advantages and disadvantages of parallel programming
- Summary
- Questions
- Technical requirements
- Tasks
- Creating and starting a task
- Getting results from finished tasks
- How to cancel tasks
- How to wait on running tasks
- Handling task exceptions
- Converting APM patterns into tasks
- Converting EAPs into tasks
- More on tasks
- Work-stealing queues
- Summary
- Technical requirements
- Moving from sequential loops to parallel loops
- Understanding the degree of parallelism
- Creating a custom partitioning strategy
- Canceling loops
- Understanding thread storage in parallel loops
- Summary
- Questions
- Technical requirements
- LINQ providers in .NET
- Writing PLINQ queries
- Preserving order in PLINQ while doing parallel executions
- Merge options in PLINQ
- Throwing and handling exceptions with PLINQ
- Combining parallel and sequential LINQ queries
- Canceling PLINQ queries
- Disadvantages of parallel programming with PLINQ
- Understanding the factors that affect the performance of PLINQ (speedups)
- Summary
- Questions
- Technical requirements
- What are synchronization primitives
- Interlocked operations
- Introduction to locking primitives
- Introduction to signaling primitives
- Lightweight synchronization primitives
- Barrier and countdown events
- SpinWait
- Summary
- Questions
- Technical requirements
- An introduction to concurrent collections
- A multiple producer-consumer scenario
- Summary
- Questions
- Technical requirements
- Introducing lazy initialization concepts
- Introducing System.Lazy
- Handling exceptions with the lazy initialization pattern
- Lazy initialization with thread-local storage
- Reducing the overhead with lazy initializations
- Summary
- Questions
- Technical requirements
- Types of program execution
- When to use asynchronous programming
- When not to use asynchronous programming
- Problems you can solve using asynchronous code
- Summary
- Questions
- Technical requirements
- Introducing async and await
- Async delegates and lambda expressions
- Task-based asynchronous patterns
- Exception handling with async code
- Async with PLINQ
- Measuring the performance of async code
- Guidelines for using async code
- Summary
- Questions
- Technical requirements
- Debugging with VS 2019
- How to debug threads
- Using Parallel Stacks windows
- Using Concurrency Visualizer
- Summary
- Questions
- Further reading
- Technical requirements
- Unit testing with .NET Core
- Understanding the problems with writing unit test cases for async code
- Writing unit test cases for parallel and async code
- Mocking the setup for async code using Moq
- Testing tools
- Summary
- Questions
- Further reading
- Technical requirements
- IIS threading model and internals
- Kestrel threading model and internals
- Introducing the best practices of threading in microservices
- Introducing async in ASP.NET MVC core
- Summary
- Questions
- Technical requirements
- The MapReduce pattern
- Aggregation
- The fork/join pattern
- The speculative processing pattern
- The lazy pattern
- Shared state pattern
- Summary
- Questions
- Technical requirements
- Introduction to distributed systems
- Shared versus distributed memory model
- Types of communication network
- Properties of communication networks
- Exploring topologies
- Programming distributed memory machines using message passing
- Collectives
- Summary
- Questions