美文网首页
Go协程并发控制

Go协程并发控制

作者: 小鱼宠ZZ | 来源:发表于2021-08-23 10:33 被阅读0次

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

    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协程并发控制

          本文链接:https://www.haomeiwen.com/subject/xqgkiltx.html