package installers // UpgradeQueue 升级队列,控制并发数 type UpgradeQueue struct { sem chan struct{} } // SharedUpgradeQueue 全局升级队列,最多5个并发 var SharedUpgradeQueue = NewUpgradeQueue(5) // NewUpgradeQueue 创建升级队列 func NewUpgradeQueue(maxConcurrent int) *UpgradeQueue { return &UpgradeQueue{ sem: make(chan struct{}, maxConcurrent), } } // SubmitNodeUpgrade 提交节点升级任务(异步执行,超过并发限制自动排队) func (q *UpgradeQueue) SubmitNodeUpgrade(nodeId int64, upgradeFunc func(int64) error) { go func() { q.sem <- struct{}{} defer func() { <-q.sem }() _ = upgradeFunc(nodeId) }() }