From daf637e4f72ed4377a38fe05c91dac17d9f17841 Mon Sep 17 00:00:00 2001 From: Andy Pan Date: Fri, 15 Jun 2018 08:04:28 +0800 Subject: [PATCH] optimization for getWorker() --- pool.go | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/pool.go b/pool.go index ee14834..72fc7e2 100644 --- a/pool.go +++ b/pool.go @@ -140,6 +140,7 @@ func (p *Pool) getWorker() *Worker { p.running++ } } else { + <-p.freeSignal w = workers[n] workers[n] = nil p.workers = workers[:n] @@ -148,20 +149,13 @@ func (p *Pool) getWorker() *Worker { if waiting { <-p.freeSignal - for { - p.lock.Lock() - workers = p.workers - l := len(workers) - 1 - if l < 0 { - p.lock.Unlock() - continue - } - w = workers[l] - workers[l] = nil - p.workers = workers[:l] - p.lock.Unlock() - break - } + p.lock.Lock() + workers = p.workers + l := len(workers) - 1 + w = workers[l] + workers[l] = nil + p.workers = workers[:l] + p.lock.Unlock() } else if w == nil { w = &Worker{ pool: p,