Member-only story
A Deep Dive Into Go Concurrency
The most robust programming language in terms of concurrency

According to the StackOverflow Developer Survey and the TIOBE index, Go (or Golang) has gained more traction, especially among backend developers and DevOps teams working on infrastructure automation. That's reason enough to talk about Go and its clever way of dealing with concurrency.
Go is known for its first-class support for concurrency, or the ability for a program to deal with multiple things at once. Running code concurrently is becoming a more critical part of programming as computers move from running a single code stream faster to running more streams simultaneously.
A programmer can make their program run faster by designing it to run concurrently so that each part of the program can run independently of the others. Three features in Go, goroutines, channels, and selects, make concurrency easier when combined together.
Goroutines solve the problem of running concurrent code in a program, and channels solve the problem of communicating safely between concurrently running code.
Goroutines are without a doubt one of Go's best features! They are very lightweight, not like OS threads, but rather hundreds of Goroutines can be multiplexed onto an OS Thread (Go has its runtime scheduler for this) with a minimal overhead of context switching! In simple terms, goroutines are a lightweight and a cheap abstraction over threads.
But how is Go's concurrency approach working under the hood? Today, I want to try to explain this to you. This article focuses more on the orchestration of Go's concurrency entities than on these entities themselves. So we won’t rely on too many code snippets today.
Go Runtime Scheduler
So to say, its job is to distribute runnable goroutines (G) over multiple worker OS threads (M) that run on one or more processors (P). Processors are handling multiple threads. Threads are handling multiple goroutines. Processors are hardware depended; the number of processors is set on the number of your CPU cores.