关于golang:Mix-XWP-V11-Go-通用动态协程池-WorkerPool

26次阅读

共计 909 个字符,预计需要花费 3 分钟才能阅读完成。

OpenMix 出品:https://openmix.org

Mix XWP

通用的工作池

A common worker pool

Github

https://github.com/mix-go/xwp

Installation

go get github.com/mix-go/xwp

Usage

先创立一个构造体用来解决工作,应用类型断言转换工作数据类型,例如:i := data.(int)

type Foo struct {
}

func (t *Foo) Do(data interface{}) {// do something}

调度工作

  • 也能够应用 RunF 采纳闭包来解决工作
  • 如果不想阻塞执行,能够应用 p.Start() 启动
jobQueue := make(chan interface{}, 200)

p := &xwp.WorkerPool{
    JobQueue:       jobQueue,
    MaxWorkers:     1000,
    InitWorkers:    100,
    MaxIdleWorkers: 100,
    RunI:           &Foo{},}

go func() {
    // 投放工作
    for i := 0; i < 10000; i++ {jobQueue <- i}

    // 投放完进行调度
    p.Stop()}()

p.Run() // 阻塞期待 

异样解决:Do 办法中执行的代码,可能会呈现 panic 异样,咱们能够通过 recover 获取异样信息记录到日志或者执行其余解决

func (t *Foo) Do(data interface{}) {defer func() {if err := recover(); err != nil {// handle error}
    }()
    // do something
}

查看 Workers 的执行状态:通常能够应用一个定时器,定时打印或者告警解决

go func() {ticker := time.NewTicker(1000 * time.Millisecond)
    for {
        <-ticker.C
        log.Printf("%+v", p.Stat()) // 2021/04/26 14:32:53 &{Active:5 Idle:95 Total:100}
    }
}()

License

Apache License Version 2.0, http://www.apache.org/licenses/

正文完
 0