]> Cypherpunks repositories - gostls13.git/commit
runtime: use channels in gcBgMarkStartWorkers
authorMichael Pratt <mpratt@google.com>
Tue, 23 Jan 2024 18:29:23 +0000 (13:29 -0500)
committerMichael Pratt <mpratt@google.com>
Fri, 26 Jan 2024 16:28:17 +0000 (16:28 +0000)
commit5dceddfe7cc53f70cdadcd2fab312fa94c4d04f5
treedd244387440fb560ec66d0738bd8c1cc70997741
parent8e02e7b26af46a1d113057ac49ad440a39a45d58
runtime: use channels in gcBgMarkStartWorkers

gcBgMarkStartWorkers currently starts workers one at a time, using a
note to communicate readiness back from the worker.

However, this is a pretty standard goroutine, so we can just use a
channel to communicate between the goroutines.

In addition to being conceptually simpler, using channels has the
additional advantage of coordinating with the scheduler. Notes use OS
locks and sleep the entire thread, requiring other threads to run the
other goroutines. Waiting on a channel allows the scheduler to directly
run another goroutine. When the worker sends to the channel, the
scheduler can use runnext to run gcBgMarkStartWorker immediately,
reducing latency.

We could additionally batch start all workers and then wait only once,
however this would defeate runnext switching between the workers and
gcBgMarkStartWorkers, so in a heavily loaded system, we expect the
direct switches to reduce latency.

Change-Id: Iedf0d2ad8ad796b43fd8d32ccb1e815cfe010cb4
Reviewed-on: https://go-review.googlesource.com/c/go/+/558535
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
src/runtime/mgc.go