美文网首页
golang控制协程(grouting)数量

golang控制协程(grouting)数量

作者: 郭青耀 | 来源:发表于2020-10-24 15:19 被阅读0次

    方法一:使用带有缓冲的channel 的特性

    • 直到缓冲区被填满后,写端才会阻塞。
    • 缓冲区被读空,读端才会阻塞。
    package main
    import "fmt"
    
    func main() {
        loopMax := 100
        limitGrouting := 10
        ch := make(chan struct{}, limitGrouting)
        defer close(ch)
        for i := 0; i < loopMax; i++ {
            go func(a int) {
                fmt.Println("hello ", a)
                ch <- struct{}{}
            }(i)
        }
        for i := 0; i < loopMax; i++ {
            <-ch
        }
    }
    

    代码中channel数据结构为什么定义struct ?
    因为空结构体变量的内存占用大小为0,而bool类型内存占用大小为1,这样可以更加最大化利用我们服务器的内存空间。

    方法二:使用sync.WaitGroup

    WaitGroup 对象内部有一个计数器,最初从0开始,它有三个方法:Add(), Done(), Wait() 用来控制计数器的数量。

    package main
    
    import (
        "fmt"
        "sync"
    )
    
    func main() {
        limitGrouting := 10
        wg := sync.WaitGroup{}
    
        for i := 0; i < limitGrouting; i++ {
            wg.Add(1)
            go func(a int) {
                fmt.Println("hello ", a)
                wg.Done()
            }(i)
        }
        wg.Wait()
    }
    

    相关文章

      网友评论

          本文标题:golang控制协程(grouting)数量

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