Merge branch 'develop'

This commit is contained in:
Andy Pan 2018-08-04 10:42:04 +08:00
commit 6c322c6373
3 changed files with 40 additions and 27 deletions

View File

@ -178,7 +178,7 @@ In that benchmark-picture, the first and second benchmarks performed test with 1
![](ants_bench_1000w.png)
There was only the test of `ants` Pool because my computer was crash when it reached 10M goroutines.
There was only the test of `ants` Pool because my computer was crash when it reached 10M goroutines without pool.
**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.**

26
ants.go
View File

@ -28,39 +28,49 @@ import (
)
const (
// DefaultPoolSize is the default capacity for a default goroutine pool
DefaultPoolSize = math.MaxInt32
// DefaultAntsPoolSize is the default capacity for a default goroutine pool
DefaultAntsPoolSize = math.MaxInt32
// DefaultCleanIntervalTime is the interval time to clean up goroutines
DefaultCleanIntervalTime = 10
)
var (
defaultAntsPool *Pool
err error
)
// Init a instance pool when importing ants
var defaultPool, _ = NewPool(DefaultPoolSize)
func init() {
defaultAntsPool, err = NewPool(DefaultAntsPoolSize)
if err != nil {
panic(err)
}
}
// Submit submit a task to pool
func Submit(task f) error {
return defaultPool.Submit(task)
return defaultAntsPool.Submit(task)
}
// Running returns the number of the currently running goroutines
func Running() int {
return defaultPool.Running()
return defaultAntsPool.Running()
}
// Cap returns the capacity of this default pool
func Cap() int {
return defaultPool.Cap()
return defaultAntsPool.Cap()
}
// Free returns the available goroutines to work
func Free() int {
return defaultPool.Free()
return defaultAntsPool.Free()
}
// Release Closed the default pool
func Release() {
defaultPool.Release()
defaultAntsPool.Release()
}
// Errors for the Ants API

View File

@ -32,6 +32,7 @@ import (
)
var n = 100000
var curMem uint64
func TestAntsPoolWithFunc(t *testing.T) {
var wg sync.WaitGroup
@ -50,7 +51,24 @@ func TestAntsPoolWithFunc(t *testing.T) {
t.Logf("pool with func, running workers number:%d", p.Running())
mem := runtime.MemStats{}
runtime.ReadMemStats(&mem)
t.Logf("memory usage:%d", mem.TotalAlloc/GiB)
curMem = mem.TotalAlloc / MiB - curMem
t.Logf("memory usage:%d", curMem)
}
func TestNoPool(t *testing.T) {
var wg sync.WaitGroup
for i := 0; i < n; i++ {
wg.Add(1)
go func() {
demoFunc()
wg.Done()
}()
}
wg.Wait()
mem := runtime.MemStats{}
runtime.ReadMemStats(&mem)
curMem = mem.TotalAlloc/MiB - curMem
t.Logf("memory usage:%d MB", curMem)
}
func TestAntsPool(t *testing.T) {
@ -72,23 +90,8 @@ func TestAntsPool(t *testing.T) {
mem := runtime.MemStats{}
runtime.ReadMemStats(&mem)
t.Logf("memory usage:%d MB", mem.TotalAlloc/MiB)
}
func TestNoPool(t *testing.T) {
var wg sync.WaitGroup
for i := 0; i < n; i++ {
wg.Add(1)
go func() {
demoFunc()
wg.Done()
}()
}
wg.Wait()
mem := runtime.MemStats{}
runtime.ReadMemStats(&mem)
t.Logf("memory usage:%d MB", mem.TotalAlloc/MiB)
curMem = mem.TotalAlloc/MiB - curMem
t.Logf("memory usage:%d MB", curMem)
}
func TestCodeCov(t *testing.T) {