VictoriaLogs is GA - Try it out now!
The VictoriaMetrics Observability Blog
Read Our Technical & Business Content on Monitoring Solutions & Time Series Databases
Tag:

Sync

Go sync.Once is Simple... Does It Really?

by Phuong Le on Nov 1, 2024

The sync.Once is probably the easiest sync primitive to use, but there’s more under the hood than you might think. It’s also a good opportunity to understand how it works by juggling both atomic operations and mutexes.

Read

Go sync.Map: The Right Tool for the Right Job

by Phuong Le on Oct 4, 2024

Go’s sync.Map isn’t a magic bullet for all concurrent map needs. It’s got some good tricks up its sleeve, like handling reads without locking, but it’s not always the best choice. This article dives into how sync.Map works under the hood, from its two-map system to the bottom line of expunged entries.

Read

Go Singleflight Melts in Your Code, Not in Your DB

by Phuong Le on Sep 20, 2024

What singleflight does is ensure that only one of those goroutines actually runs the operation, like getting the data from the database. It allows only one ‘in-flight’ (ongoing) operation for the same piece of data (known as a ‘key’) at any given moment.

Read

Go sync.Cond, the Most Overlooked Sync Mechanism

by Phuong Le on Sep 13, 2024

In Go, sync.Cond is a synchronization primitive, though it’s not as commonly used as its siblings like sync.Mutex or sync.WaitGroup. That said, as a Go engineer, you don’t really want to find yourself reading through code that uses sync.Cond and not have a clue what’s going on.

Read

Go sync.WaitGroup and The Alignment Problem

by Phuong Le on Sep 6, 2024

When we’re spinning off many goroutines to do their thing, we want to keep track of them so that the main goroutine doesn’t just finish up and exit before everyone else is done. That’s where the WaitGroup comes in. Each time one of our goroutines wraps up its task, it lets the WaitGroup know.

Read

Go sync.Pool and the Mechanics Behind It

by Phuong Le on Aug 23, 2024

Instead of just throwing these objects after each use, which would only give the garbage collector more work, we stash them in a pool (sync.Pool). The next time we need something similar, we just grab it from the pool instead of making a new one from scratch.

Read

Go sync.Mutex: Normal and Starvation Mode

by Phuong Le on Aug 9, 2024

Mutex in Go has two main flows: Lock and Unlock and 2 modes: Normal and Starvation Mode. The state field of mutex is a 32-bit integer that represents the current state, it’s divided into multiple bits that encode various pieces of information about the mutex.

Read

Watch Your Monitoring SkyRocket With VictoriaMetrics!