限制goroutine数量写法
阅读原文时间:2021年04月20日阅读:1

虽然golang的goroutine可以开启无数个goroutine,但是没有限制也是不行的。我就写一下我对goroutine数量限制的写法

1、初始化goroutine协程池。把goroutine数量开启完毕

2、在池子中调用goroutine

package main

import (
"fmt"
"runtime"
"time"
)

/*
主要逻辑
1、初始化一个工作池,并且定义要启动多少个goroutine的数量的channel
2、在这个池子里面,把数据加入到channel 这里用for循环
3、在具体的函数中的defer中把channel里面的数据去除掉
*/

var (
ch=make(chan bool,)
c=
)

//初始化工作池
func init(){
for i:=;i<c;i++{
go Queu()
}
}

func main(){
fmt.Print("main")

//获取一行的输入  
var input string  
fmt.Scanln(&input)  

}

//在工作池中限制goroutine的数量
func Queu(){
t:=time.NewTicker(time.Second)
defer func(){
t.Stop()
}()

for{  
    select{  
    case ch<-true:  
        go test1()  
    case <-t.C:  
        test()  
    }  
}

}

func test1(){
defer func(){
<-ch
}()
time.Sleep(time.Millisecond * )
}

func test(){
fmt.Printf("%d====numGo\n", runtime.NumGoroutine())
}

我的理解:限制goroutine的数量:

  就是通过channel的异步阻塞的特性来完成

上面的代码还不健壮,加上waitgroup以及锁,可以在不同的场景下适用

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器