Frank Müller

Concurrency with Go

What if concurrency wasn't about locks, but about better software design? Go's primitives enable a more natural way to build systems by composing independent processes.

Concurrency with Go
#1about 6 minutes

Concurrency as a natural model for software design

Modern software can be structured like the real world by composing independent processes that communicate with each other.

#2about 4 minutes

The evolution from threads to modern concurrency

Modern runtimes manage lightweight processes, moving beyond complex, error-prone threading with mutexes to encapsulated state and message passing.

#3about 6 minutes

Actor model vs communicating sequential processes (CSP)

Go's concurrency is built on the Communicating Sequential Processes (CSP) model, where anonymous processes communicate over named channels, unlike the Actor model's named processes with inboxes.

#4about 8 minutes

Common patterns for concurrent architectures

Concurrency enables powerful design patterns like service providers, resource managers, supervisors for fault tolerance, and ETL data pipelines.

#5about 4 minutes

An overview of the Go programming language

Go is a pragmatic, multi-paradigm language designed by pioneers like Ken Thompson and Rob Pike, featuring implicit interfaces and first-class functions.

#6about 8 minutes

Go's core concurrency primitives: goroutines and channels

Lightweight concurrent functions called goroutines are launched with the `go` keyword and communicate or synchronize over typed channels.

#7about 3 minutes

Waiting for goroutines with sync.WaitGroup

The `sync.WaitGroup` type provides a simple and effective mechanism to block the main goroutine until a collection of background jobs has completed.

#8about 6 minutes

Streaming and piping data with channels

Channels can be used to stream data between goroutines, and closing a channel signals the end of the stream to a ranging receiver.

#9about 5 minutes

Building a concurrent service with multiple channels

A common but verbose approach to building a concurrent service involves creating separate channels for each type of operation, leading to complex state management.

#10about 5 minutes

A simpler actor-like pattern using a function channel

A more elegant service pattern uses a single channel to send functions, which are then executed sequentially by the background goroutine, simplifying the API and centralizing logic.

Related jobs
Jobs that call for the skills explored in this talk.

Featured Partners

From learning to earning

Jobs that call for the skills explored in this talk.

Rust and GoLang

Rust and GoLang

NHe4a GmbH
Karlsruhe, Germany

Remote
55-65K
Intermediate
Senior
Go
Rust