]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: reduce critical path in injectglist
authorCholerae Hu <choleraehyq@gmail.com>
Mon, 11 May 2020 03:18:57 +0000 (11:18 +0800)
committerIan Lance Taylor <iant@golang.org>
Tue, 18 Aug 2020 04:22:33 +0000 (04:22 +0000)
Change-Id: Ia3fb30ac9add39c803f11f69d967c6604fdeacf8
Reviewed-on: https://go-review.googlesource.com/c/go/+/233217
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/runtime/proc.go

index 9a358cd5291b23eede438596f6c0979a128e2089..5e38b3194c8c5180c4658b577b9fa679abf12b72 100644 (file)
@@ -2575,15 +2575,20 @@ func injectglist(glist *gList) {
                return
        }
 
-       lock(&sched.lock)
-       npidle := int(sched.npidle)
+       npidle := int(atomic.Load(&sched.npidle))
+       var globq gQueue
        var n int
        for n = 0; n < npidle && !q.empty(); n++ {
-               globrunqput(q.pop())
+               g := q.pop()
+               globq.pushBack(g)
+       }
+       if n > 0 {
+               lock(&sched.lock)
+               globrunqputbatch(&globq, int32(n))
+               unlock(&sched.lock)
+               startIdle(n)
+               qsize -= n
        }
-       unlock(&sched.lock)
-       startIdle(n)
-       qsize -= n
 
        if !q.empty() {
                runqputbatch(pp, &q, qsize)