From 12fe0f2a90e5b5aeb0ff23e719679ee9ab3517d4 Mon Sep 17 00:00:00 2001 From: John Date: Tue, 16 Jan 2018 17:07:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90grpool=E6=80=A7=E8=83=BD?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/os/grpool/grpool_api.go | 11 +++------- g/os/grpool/grpool_test.go | 41 +++++++++++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/g/os/grpool/grpool_api.go b/g/os/grpool/grpool_api.go index 950e54388..95beb37c6 100644 --- a/g/os/grpool/grpool_api.go +++ b/g/os/grpool/grpool_api.go @@ -16,7 +16,7 @@ import ( const ( gDEFAULT_EXPIRE_TIME = 60 // 默认goroutine过期时间 - gDEFAULT_CLEAR_INTERVAL = 3 // 定期检查任务过期时间间隔 + gDEFAULT_CLEAR_INTERVAL = 60 // 定期检查任务过期时间间隔 ) // goroutine池对象 @@ -41,17 +41,12 @@ type PoolJob struct { var defaultPool = New(gDEFAULT_EXPIRE_TIME) // 创建goroutine池管理对象,给定过期时间(秒) -// 第二个参数设置允许同时执行的最大任务数,用户可以限制最大并行任务数(非必需参数,默认为不限制) -func New(expire int, sizes...int) *Pool { - size := math.MaxUint32 - if len(sizes) > 0 { - size = sizes[0] - } +func New(expire int) *Pool { p := &Pool { expire : int32(expire), queue : glist.NewSafeList(), funcs : glist.NewSafeList(), - funcEvents : make(chan struct{}, size), + funcEvents : make(chan struct{}, math.MaxUint32), stopEvents : make(chan struct{}, 1), } p.startWorkLoop() diff --git a/g/os/grpool/grpool_test.go b/g/os/grpool/grpool_test.go index ca11d8403..d00577708 100644 --- a/g/os/grpool/grpool_test.go +++ b/g/os/grpool/grpool_test.go @@ -10,21 +10,44 @@ package grpool_test import ( "testing" - "gitee.com/johng/gf/g/os/grpool" + "runtime" + "fmt" ) +var n = 5000000 + func increment() { for i := 0; i < 1000000; i++ {} } -func BenchmarkGroutine(b *testing.B) { - for i := 0; i < b.N; i++ { - grpool.Add(increment) - } -} +//func Test_GrpoolMemUsage(t *testing.T) { +// for i := 0; i < n; i++ { +// grpool.Add(increment) +// } +// mem := runtime.MemStats{} +// runtime.ReadMemStats(&mem) +// fmt.Println("mem usage:", mem.TotalAlloc/1024) +//} -func BenchmarkGoRoutine(b *testing.B) { - for i := 0; i < b.N; i++ { +func Test_GroroutineMemUsage(t *testing.T) { + for i := 0; i < n; i++ { go increment() } -} \ No newline at end of file + mem := runtime.MemStats{} + runtime.ReadMemStats(&mem) + fmt.Println("mem usage:", mem.TotalAlloc/1024) +} + +//func BenchmarkGrpool(b *testing.B) { +// b.N = n +// for i := 0; i < b.N; i++ { +// grpool.Add(increment) +// } +//} + +//func BenchmarkGoroutine(b *testing.B) { +// b.N = n +// for i := 0; i < b.N; i++ { +// go increment() +// } +//} \ No newline at end of file