Multithreading In Go Lang

Learn about Multithreading, Concurrency & Parallel programming with practical and fun examples in Google's Go Lang

Last updated 2022-01-10 | 4.7

- 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.

What you'll learn

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.

* Requirements

* Some experience of programming in Go (enough if you know how to use functions
* loops
* arrays and a bit of pointers).
* Recent version of Go installed.
* Being able to do 50 push-ups while shouting a unique prime number on each rep (just kidding).

Description

The mood in the meeting on the 12th floor of an international investment bank was as bleak as it gets. The developers of the firm met to discuss the best way forward after a critical core application failed and caused a system wide outage.


"Guys, we have a serious issue here. I found out that the outage was caused by a race condition in our code, introduced a while ago and triggered last night." says Mark Adams, senior developer.


The room goes silent. The cars outside the floor to ceiling windows slowly and silently creep along in the heavy city traffic. The senior developers immediately understand the severity of the situation, realizing that they will now be working around the clock to fix the issue and sort out the mess in the datastore. The less experienced developers understand that a race condition is serious but don't know exactly what causes it and therefore keep their mouths shut.


Eventually Brian Holmes, delivery manager, breaks the silence with "The application has been running for months without any problems, we haven't released any code recently, how is it possible that the software just broke down?!"


Everyone shakes their heads and goes back to their desk leaving Brian in the room alone, puzzled. He takes out his phone and googles "race condition".


Sound familiar? How many times have you heard another developer talking about using threads and concurrent programming to solve a particular problem but out of fear you stayed out of the discussion?


Here's the little secret that senior developers will never share... Multithreading programming is not much harder than normal programming. Developers are scared of concurrent programming because they think it is an advanced topic that only highly experienced developers get to play with.


This is far from the truth. Our minds are very much used to dealing with concurrency. In fact we do this in our everyday life without any problem but somehow we struggle to translate this into our code. One of the reasons for this is that we're not familiar with the concepts and tools available to us to manage this concurrency. This course is here to help you understand how to use multithreading tools and concepts to manage your parallel programming. It is designed to be as practical as possible. We start with some theory around parallelism and then explain how the operating system handles multiple processes and threads. Later we move on to explain the multiple tools available by solving example problems using multithreading.


In this course we use Google's Go programming language with its goroutines, however the concepts learned here can be applied to most programming languages.


All code in this course can be found on github, username/project: cutajarj/multithreadingingo

Who this course is for:

  • Developers who want to take their career to the next level by improving their skills and learning about concurrent multithreading programming.
  • College students currently learning about parallel computing who want to see how concepts learned in class relate to practice.
  • Experienced developers that have recently started working with Go and want to discover the multithreading tools available.
  • Delivery managers called Brian Holmes.

Course content

10 sections • 52 lectures

Understanding Parallel Computing Preview 04:23

More on Parallel Computing Preview 05:50

Links and Resources for this course Preview 00:22

Processes, Threads and Green threads Preview 12:27

Using Goroutines for Boids Preview 04:18

Groundwork for our simulation Preview 05:13

Starting our Goroutines Preview 08:53

Memory sharing between Threads Preview 06:46

Memory Sharing example Part 1 Preview 05:37

Memory Sharing example Part 2 Preview 06:40

Using Threads Quiz

Why do we need Locking? Preview 08:59

Using Mutexes in Boid simulation Preview 05:46

Adding Synchronization to simulation Preview 05:26

Readers-Writer Locks Preview 07:12

Boid Synchronization with Readers-Writers Locks Preview 07:13

Mutexes Quiz

Understanding WaitGroups Preview 06:42

Concurrent file searching with WaitGroups Preview 07:49

WaitGroup Quiz

Thread Communication using Channels Preview 10:07

Pipelining Example Preview 12:31

Understanding Thread Pools Preview 07:59

Thread Pool Example Part 1 Preview 08:17

Thread Pool Example Part 2 Preview 06:06

Shoelace algorithm explained (optional) Preview 00:05

Channels Quiz

What's a Condition Variable? Preview 07:00

Parallel Algorithm for Matrix Multiplication Preview 09:27

Implementing Parallel Matrix Multiplication Part 1 Preview 07:05

Implementing Parallel Matrix Multiplication Part 2 Preview 06:06

Condition Variable Quiz

Deadlocking Robots, Philosophers and Trains Preview 08:29

Simple Deadlock Example Preview 04:17

Train Deadlock Example Part 1 Preview 03:40

Train Deadlock Example Part 2 Preview 08:29

Solving Deadlocks using Resource Hierarchy Preview 07:08

Implementing Resource Hierarchy Solution Preview 06:54

Solving Deadlocks using an Arbitrator Preview 08:10

Implementing Arbitrator Solution Preview 05:36

Barriers Explained Preview 07:45

Building a Barrier Preview 08:02

Barriers with Matrix Multiplication Preview 07:45

Understanding Atomic Variables Preview 08:57

Atomic Variables Example Preview 02:59

Building a Letter Frequency Program Preview 07:24

Using Atomic Variables in our Example Preview 07:03

Locking using Spinning locks Preview 06:15

Building our own Spinning locks Preview 04:54

Ledger Example Preview 09:50

Implementing the Ledger Part 1 Preview 06:42

Implementing the Ledger Part 2 Preview 09:47