You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ti...@apache.org on 2021/05/07 02:47:56 UTC

[servicecomb-service-center] branch master updated: Fix: Gopool should reuse worker with certainty (#963)

This is an automated email from the ASF dual-hosted git repository.

tianxiaoliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-service-center.git


The following commit(s) were added to refs/heads/master by this push:
     new 9d50638  Fix: Gopool should reuse worker with certainty (#963)
9d50638 is described below

commit 9d50638496e37fa3e5bfac388e382f932430b10c
Author: szt-sketch <76...@users.noreply.github.com>
AuthorDate: Fri May 7 10:47:47 2021 +0800

    Fix: Gopool should reuse worker with certainty (#963)
---
 pkg/gopool/goroutines.go | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/pkg/gopool/goroutines.go b/pkg/gopool/goroutines.go
index d5ca917..cf1a53b 100644
--- a/pkg/gopool/goroutines.go
+++ b/pkg/gopool/goroutines.go
@@ -81,10 +81,14 @@ func (g *Pool) execute(f func(ctx context.Context)) {
 func (g *Pool) Do(f func(context.Context)) *Pool {
 	defer log.Recover()
 	select {
-	case g.pending <- f: // block if workers are busy
-	case g.workers <- struct{}{}:
-		g.wg.Add(1)
-		go g.loop(f)
+	case g.pending <- f: // try to reuse worker first
+	default:
+		select {
+		case g.pending <- f: // block if workers are busy
+		case g.workers <- struct{}{}:
+			g.wg.Add(1)
+			go g.loop(f)
+		}
 	}
 	return g
 }