限制goroutine数量写法

虽然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,100)
    c=3
)

//初始化工作池
func init(){
    for i:=0;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 * 100)
}

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

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

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

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

转载于:https://www.cnblogs.com/pyrene/p/8916513.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值