美文网首页
限制协程使用数量

限制协程使用数量

作者: 快感炮神 | 来源:发表于2020-09-18 16:25 被阅读0次

    不限制的时候,有多少业务开多少协程

    func job(index int) {
        time.Sleep(time.Millisecond * 500)
        fmt.Println(index)
    }
    
    func main() {
        wg := sync.WaitGroup{}
        for i := 0; i < 100; i++ {
            wg.Add(1)
            go func(index int) {
                defer wg.Done()
                job(index)
            }(i)
        }
        wg.Wait()
    }
    
    

    限制协程

    var pool chan struct{}
    
    func job(index int) {
        time.Sleep(time.Millisecond * 500)
        fmt.Println(index)
    }
    
    func main() {
        wg := sync.WaitGroup{}
        pool = make(chan struct{}, 10)
    
        for i := 0; i < 100; i++ {
            wg.Add(1)
            pool <- struct{}{}
    
            go func(index int) {
                defer wg.Done()
                defer func() {
                    <-pool
                }()
                job(index)
            }(i)
        }
        wg.Wait()
    }
    

    或者

    var pool chan struct{}
    
    func job(index int, pool <-chan struct{}) {
        defer func() {
            <-pool
        }()
        time.Sleep(time.Millisecond * 500)
        fmt.Println(index)
    }
    
    func main() {
        wg := sync.WaitGroup{}
        pool = make(chan struct{}, 10)
    
        for i := 0; i < 100; i++ {
            wg.Add(1)
            pool <- struct{}{}
    
            go func(index int) {
                defer wg.Done()
                job(index, pool)
            }(i)
        }
        wg.Wait()
    }
    

    结果就变成分批打印了,达到限制的效果

    相关文章

      网友评论

          本文标题:限制协程使用数量

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