Awesome
workpool
基于ringbuffer的无锁golang workpool
usage
type TestTask struct {
name string
}
func (t *TestTask) Run() *[]byte {
fmt.Println(t.name)
res := []byte(t.name)
time.Sleep(time.Duration(1 * time.Second))
return &res
}
func createPool() *workpool.Pool {
conf := &workpool.PoolConfig{
MaxWorkers: 1024,
MaxIdleWorkers: 512,
MinIdleWorkers: 128,
KeepAlive: time.Duration(30 * time.Second),
}
p, err := workpool.NewWorkerPool(1024, conf)
if err != nil {
panic(err)
}
p.Start()
return p
}
wp := createPool()
ft := workpool.NewFutureTask(&TestTask{
name: "daiwei",
})
wp.Submit(ft)
res, _ := ft.Wait(time.Duration(3 * time.Second))