Description
In this course, you will :
- Discover how to create responsive and high performance software.
- See how to use multithreading for modeling certain types of problems and simulations.
- Develop programs with Golang that are highly Concurrent and Parallel.
- Understand the advantages, limits and properties of Parallel computing.
- Improve your programming skills in Go with more advanced, mulithreading topics.
- Learn about goroutines, mutexes, reader writers locks, waitgroups, channels, condition variables and more.
Syllabus :
1. Creating and using Threads
- Processes, Threads and Green threads
- Using Goroutines for Boids
- Groundwork for our simulation
- Starting our Goroutines
- Memory sharing between Threads
- Memory Sharing example
2. Thread Synchronization with Mutexes
- Why do we need Locking?
- Using Mutexes in Boid simulation
- Adding Synchronization to simulation
- Readers-Writer Locks
- Boid Synchronization with Readers-Writers Locks
3. Waiting for Completed tasks
- Understanding WaitGroups
- Concurrent file searching with WaitGroups
4. Message passing with Channels
- Thread Communication using Channels
- Pipelining Example
- Understanding Thread Pools
- Thread Pool Example
- Shoelace algorithm explained (optional)
5. Synchronization using Condition Variables
- What's a Condition Variable?
- Parallel Algorithm for Matrix Multiplication
- Implementing Parallel Matrix Multiplication
6. Deadlocks
- Deadlocking Robots, Philosophers and Trains
- Simple Deadlock Example
- Train Deadlock Example
- Solving Deadlocks using Resource Hierarchy
- Implementing Resource Hierarchy Solution
- Solving Deadlocks using an Arbitrator
- Implementing Arbitrator Solution
7. Barriers
- Barriers Explained
- Building a Barrier
- Barriers with Matrix Multiplication
8. Atomic Variables
- Understanding Atomic Variables
- Atomic Variables Example
- Building a Letter Frequency Program
- Using Atomic Variables in our Example
9. Spinning Locks
- Locking using Spinning locks
- Building our own Spinning locks
- Ledger Example
- Implementing the Ledger