mirror of
https://github.com/iLoveElysia/openbilibili.git
synced 2026-09-02 15:48:07 -05:00
38 lines
687 B
Markdown
38 lines
687 B
Markdown
# 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))
|
|
``` |