Search⌘ K
AI Features

Utilizing Goroutines for Concurrency

Explore how to use goroutines to run functions concurrently in Go. Understand synchronization techniques with channels and WaitGroups to manage data safely and coordinate concurrent tasks for efficient program execution.

In the modern era of computers, concurrency is the name of the game. In the years before 2005 or so, computers used Moore’s law to double the speed of a single central processing unit (CPU) every 18 months. Multiple CPU consumer systems were rare, and there was one core per CPU in the system. Software that utilized multiple cores efficiently was rare. Over time, it became more expensive to increase single-core speed, and multi-core CPUs have become the norm.

Each core on a CPU supports a number of hardware threads, and operating systems (OSs) provide OS threads that are mapped to hardware threads that are then shared between processes.

Languages can utilize these OS threads to run functions in their language concurrently instead of serially, as we have been doing in all of our code so far.

Starting an OS thread is an expensive operation, and fully utilizing the thread's time requires paying a lot of attention to what we are doing.

Go takes this to another level than most languages with goroutines. Go has built a runtime scheduler that maps these goroutines onto OS threads and switches which routine is running on which thread to optimize CPU utilization.

This produces concurrency that is ...