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  }