]> Cypherpunks repositories - gostls13.git/commit
runtime: add general suspendG/resumeG
authorAustin Clements <austin@google.com>
Fri, 27 Sep 2019 16:27:51 +0000 (12:27 -0400)
committerAustin Clements <austin@google.com>
Fri, 25 Oct 2019 23:25:28 +0000 (23:25 +0000)
commit3f834114ab617eb7b414cb12e7ca8085b5fe3a5c
tree1eaf7f59fe268f9936fbb192c297397d6145ddb1
parent46e0d724b3f14fd0d350123bbf101e815b493791
runtime: add general suspendG/resumeG

Currently, the process of suspending a goroutine is tied to stack
scanning. In preparation for non-cooperative preemption, this CL
abstracts this into general purpose suspendG/resumeG functions.

suspendG and resumeG closely follow the existing scang and restartg
functions with one exception: the addition of a _Gpreempted status.
Currently, preemption tasks (stack scanning) are carried out by the
target goroutine if it's in _Grunning. In this new approach, the task
is always carried out by the goroutine that called suspendG. Thus, we
need a reliable way to drive the target goroutine out of _Grunning
until the requesting goroutine is ready to resume it. The new
_Gpreempted state provides the handshake: when a runnable goroutine
responds to a preemption request, it now parks itself and enters
_Gpreempted. The requesting goroutine races to put it in _Gwaiting,
which gives it ownership, but also the responsibility to start it
again.

This CL adds several TODOs about improving the synchronization on the
G status. The existing code already has these problems; we're just
taking note of them.

The next CL will remove the now-dead scang and preemptscan.

For #10958, #24543.

Change-Id: I16dbf87bea9d50399cc86719c156f48e67198f16
Reviewed-on: https://go-review.googlesource.com/c/go/+/201137
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/runtime/mgcmark.go
src/runtime/preempt.go [new file with mode: 0644]
src/runtime/proc.go
src/runtime/runtime2.go
src/runtime/stack.go
src/runtime/traceback.go