diff options
author | Andy Pan <panjf2000@gmail.com> | 2021-04-23 21:25:06 +0800 |
---|---|---|
committer | Michael Pratt <mpratt@google.com> | 2021-05-05 15:53:20 +0000 |
commit | 3b304ce7fe35b9d1e8cf0b0518ed2550c361a010 (patch) | |
tree | ad92c193eb9dd4778e57ebb22c98267be875ce23 /src/runtime/mgc.go | |
parent | f34fe8e370f8bd910640fa49bb4d93e910145193 (diff) | |
download | go-3b304ce7fe35b9d1e8cf0b0518ed2550c361a010.tar.gz go-3b304ce7fe35b9d1e8cf0b0518ed2550c361a010.zip |
runtime: implement runqdrain() for GC mark worker goroutines
Revive CL 310149
Change-Id: Ib4714ea5b2ade32c0f66edff841a79d8212bd79a
Reviewed-on: https://go-review.googlesource.com/c/go/+/313009
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Michael Pratt <mpratt@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
Trust: Michael Pratt <mpratt@google.com>
Trust: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/runtime/mgc.go')
-rw-r--r-- | src/runtime/mgc.go | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/src/runtime/mgc.go b/src/runtime/mgc.go index 601593087d..4585663535 100644 --- a/src/runtime/mgc.go +++ b/src/runtime/mgc.go @@ -1273,15 +1273,11 @@ func gcBgMarkWorker() { // everything out of the run // queue so it can run // somewhere else. - lock(&sched.lock) - for { - gp, _ := runqget(pp) - if gp == nil { - break - } - globrunqput(gp) + if drainQ, n := runqdrain(pp); n > 0 { + lock(&sched.lock) + globrunqputbatch(&drainQ, int32(n)) + unlock(&sched.lock) } - unlock(&sched.lock) } // Go back to draining, this time // without preemption. |