温馨提示:觉得有帮助的话, 给我点赞哦~
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...
}
温馨提示:觉得有帮助的话, 给我点赞哦~
网友评论