github.com/Anderson-Lu/gotask@v0.0.0-20190131033646-c18b9f168453/gotask_test.go (about) 1 package gotask 2 3 import ( 4 "math/rand" 5 "sync" 6 "testing" 7 "time" 8 ) 9 10 var tasks = NewGoTask(10000, false) 11 var lock sync.Mutex 12 var total = 0 13 14 func add(params ...interface{}) { 15 time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond) 16 lock.Lock() 17 total += tasks.GetParamter(0, params).(int) 18 lock.Unlock() 19 } 20 21 func BenchmarkConcureentTask(t *testing.B) { 22 for i := 0; i < 10000; i++ { 23 tasks.Add(add, 1) 24 } 25 t.StartTimer() 26 tasks.Start() 27 } 28 29 func BenchmarkTypeAssert(t *testing.B) { 30 t.StartTimer() 31 var wg sync.WaitGroup 32 var k interface{} = "s" 33 sum := 0 34 for i := 0; i < 10000; i++ { 35 go func(s interface{}) { 36 defer func() { 37 wg.Done() 38 }() 39 wg.Add(1) 40 sum += len(k.(string)) 41 }(k) 42 } 43 wg.Wait() 44 } 45 46 //basic usage via gorutine but specific concreate param type 47 func BenchmarkConcurrentTaskRoutine(t *testing.B) { 48 t.StartTimer() 49 sum := 0 50 var wg sync.WaitGroup 51 for i := 0; i < 10000; i++ { 52 go func(i int) { 53 defer func() { 54 wg.Done() 55 }() 56 time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond) 57 sum += 1 58 wg.Add(1) 59 }(i) 60 } 61 wg.Wait() 62 }