zoukankan      html  css  js  c++  java
  • 限制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
    ", runtime.NumGoroutine())
    }

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

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

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

  • 相关阅读:
    gRPC .NET Core跨平台学习
    .NET Core性能测试组件BenchmarkDotNet 支持.NET Framework Mono
    ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析
    gRPC C#学习
    中标麒麟关闭防火墙
    linux安装python
    python matplotlib.pyplot保存jpg图片失败
    python正态分布
    数据健康管理总结
    python使用statsmodel
  • 原文地址:https://www.cnblogs.com/pyrene/p/8916513.html
Copyright © 2011-2022 走看看