github.com/guestin/mob@v1.1.1/msync/worker_pool_test.go (about)

     1  package msync
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"runtime"
     7  	"testing"
     8  	"time"
     9  )
    10  
    11  func BenchmarkWorkerPool(b *testing.B) {
    12  	caseFn := func() {
    13  		cancel, cancelFunc := context.WithCancel(context.Background())
    14  		defer cancelFunc()
    15  		pool := NewWorkerPool(cancel, "tester", runtime.NumCPU())
    16  		pool.SetIdleMax(time.Second * 5)
    17  		defer pool.Wait()
    18  		for i := 0; i < 100; i++ {
    19  			s := fmt.Sprintf("task:%d", i)
    20  			pool.Submit(func() {
    21  				println(s, " enter")
    22  				println(s, " exit")
    23  				time.Sleep(time.Second * 1)
    24  			})
    25  		}
    26  	}
    27  	b.ResetTimer()
    28  	for i := 0; i < 20; i++ {
    29  		caseFn()
    30  		println("\n\n\n\n")
    31  	}
    32  }