Go协程并发控制

温馨提示:觉得有帮助的话, 给我点赞哦~

1.协程并发控制Wait

// wait.go

package wait

import "sync"

// Wait 并发控制
type Wait struct {
    wg *sync.WaitGroup
    fn []func()
}

// Add 新增协程
func (w *Wait) Add(fn func()) {
    w.fn = append(w.fn, fn)
}

// Run 等待协程
func (w *Wait) Run() {
    delta := len(w.fn)

    if delta == 0 {
        return
    }

    w.wg.Add(delta)

    for _, f := range w.fn {
        go func(f func()) {
            f()
            w.wg.Done()
        }(f)
    }

    w.wg.Wait()
}

// NewWait 新建Wait
func NewWait() *Wait {
    return &Wait{
        wg: new(sync.WaitGroup),
    }
}

2. 使用演示


func init() {
    runtime.GOMAXPROCS(runtime.NumCPU())
}

func main() {
    w := wait.NewWait()

    // 任务
    w.Add(task)
    // web server
    w.Add(serve)
    // 监控节点
    w.Add(node)
        
    // 运行
    w.Run()
}

// 其他任务
func task() {
  // todo...
}

// web server
func serve() {
  // todo...
}

// K8S节点状态监控
func node() {
  // todo...
}

温馨提示:觉得有帮助的话, 给我点赞哦~

你可能感兴趣的:(Go协程并发控制)