forked from mirror/ants
Merge branch 'develop'
This commit is contained in:
commit
2ce873b39e
|
@ -182,9 +182,9 @@ There was only the test of `ants` Pool because my computer was crash when it rea
|
|||
|
||||
**As you can see, `ants` can up to 2x~6x faster than goroutines without pool and the memory consumption is reduced by 10 to 20 times.**
|
||||
|
||||
[1]: https://travis-ci.com/panjf2000/ants.svg?branch=master
|
||||
[1]: https://travis-ci.com/panjf2000/ants.svg?branch=develop
|
||||
[2]: https://travis-ci.com/panjf2000/ants
|
||||
[3]: https://codecov.io/gh/panjf2000/ants/branch/master/graph/badge.svg
|
||||
[3]: https://codecov.io/gh/panjf2000/ants/branch/develop/graph/badge.svg
|
||||
[4]: https://codecov.io/gh/panjf2000/ants
|
||||
[5]: https://goreportcard.com/badge/github.com/panjf2000/ants
|
||||
[6]: https://goreportcard.com/report/github.com/panjf2000/ants
|
||||
|
|
|
@ -180,9 +180,9 @@ Go1.9
|
|||
|
||||
**从该demo测试吞吐性能对比可以看出,使用ants的吞吐性能相较于原生goroutine可以保持在2-6倍的性能压制,而内存消耗则可以达到10-20倍的节省优势。**
|
||||
|
||||
[1]: https://travis-ci.com/panjf2000/ants.svg?branch=master
|
||||
[1]: https://travis-ci.com/panjf2000/ants.svg?branch=develop
|
||||
[2]: https://travis-ci.com/panjf2000/ants
|
||||
[3]: https://codecov.io/gh/panjf2000/ants/branch/master/graph/badge.svg
|
||||
[3]: https://codecov.io/gh/panjf2000/ants/branch/develop/graph/badge.svg
|
||||
[4]: https://codecov.io/gh/panjf2000/ants
|
||||
[5]: https://goreportcard.com/badge/github.com/panjf2000/ants
|
||||
[6]: https://goreportcard.com/report/github.com/panjf2000/ants
|
||||
|
|
22
pool.go
22
pool.go
|
@ -129,16 +129,6 @@ func (p *Pool) Running() int {
|
|||
return int(atomic.LoadInt32(&p.running))
|
||||
}
|
||||
|
||||
// IncrRunning increases the number of the currently running goroutines
|
||||
func (p *Pool) IncrRunning() {
|
||||
atomic.AddInt32(&p.running, 1)
|
||||
}
|
||||
|
||||
// DecrRunning decreases the number of the currently running goroutines
|
||||
func (p *Pool) DecrRunning() {
|
||||
atomic.AddInt32(&p.running, -1)
|
||||
}
|
||||
|
||||
// Free returns the available goroutines to work
|
||||
func (p *Pool) Free() int {
|
||||
return int(atomic.LoadInt32(&p.capacity) - atomic.LoadInt32(&p.running))
|
||||
|
@ -182,6 +172,16 @@ func (p *Pool) Release() error {
|
|||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
// incrRunning increases the number of the currently running goroutines
|
||||
func (p *Pool) incrRunning() {
|
||||
atomic.AddInt32(&p.running, 1)
|
||||
}
|
||||
|
||||
// decrRunning decreases the number of the currently running goroutines
|
||||
func (p *Pool) decrRunning() {
|
||||
atomic.AddInt32(&p.running, -1)
|
||||
}
|
||||
|
||||
// getWorker returns a available worker to run the tasks.
|
||||
func (p *Pool) getWorker() *Worker {
|
||||
var w *Worker
|
||||
|
@ -215,7 +215,7 @@ func (p *Pool) getWorker() *Worker {
|
|||
task: make(chan f, 1),
|
||||
}
|
||||
w.run()
|
||||
p.IncrRunning()
|
||||
p.incrRunning()
|
||||
}
|
||||
return w
|
||||
}
|
||||
|
|
22
pool_func.go
22
pool_func.go
|
@ -134,16 +134,6 @@ func (p *PoolWithFunc) Running() int {
|
|||
return int(atomic.LoadInt32(&p.running))
|
||||
}
|
||||
|
||||
// IncrRunning increases the number of the currently running goroutines
|
||||
func (p *PoolWithFunc) IncrRunning() {
|
||||
atomic.AddInt32(&p.running, 1)
|
||||
}
|
||||
|
||||
// DecrRunning decreases the number of the currently running goroutines
|
||||
func (p *PoolWithFunc) DecrRunning() {
|
||||
atomic.AddInt32(&p.running, -1)
|
||||
}
|
||||
|
||||
// Free returns the available goroutines to work
|
||||
func (p *PoolWithFunc) Free() int {
|
||||
return int(atomic.LoadInt32(&p.capacity) - atomic.LoadInt32(&p.running))
|
||||
|
@ -187,6 +177,16 @@ func (p *PoolWithFunc) Release() error {
|
|||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
// incrRunning increases the number of the currently running goroutines
|
||||
func (p *PoolWithFunc) incrRunning() {
|
||||
atomic.AddInt32(&p.running, 1)
|
||||
}
|
||||
|
||||
// decrRunning decreases the number of the currently running goroutines
|
||||
func (p *PoolWithFunc) decrRunning() {
|
||||
atomic.AddInt32(&p.running, -1)
|
||||
}
|
||||
|
||||
// getWorker returns a available worker to run the tasks.
|
||||
func (p *PoolWithFunc) getWorker() *WorkerWithFunc {
|
||||
var w *WorkerWithFunc
|
||||
|
@ -220,7 +220,7 @@ func (p *PoolWithFunc) getWorker() *WorkerWithFunc {
|
|||
args: make(chan interface{}, 1),
|
||||
}
|
||||
w.run()
|
||||
p.IncrRunning()
|
||||
p.incrRunning()
|
||||
}
|
||||
return w
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ func (w *Worker) run() {
|
|||
go func() {
|
||||
for f := range w.task {
|
||||
if f == nil {
|
||||
w.pool.DecrRunning()
|
||||
w.pool.decrRunning()
|
||||
return
|
||||
}
|
||||
f()
|
||||
|
|
|
@ -46,7 +46,7 @@ func (w *WorkerWithFunc) run() {
|
|||
go func() {
|
||||
for args := range w.args {
|
||||
if args == nil {
|
||||
w.pool.DecrRunning()
|
||||
w.pool.decrRunning()
|
||||
return
|
||||
}
|
||||
w.pool.poolFunc(args)
|
||||
|
|
Loading…
Reference in New Issue