zoukankan      html  css  js  c++  java
  • go goroutines 使用小结

    go +方法 就实现了一个并发,但由于环境不同,需要对并发的个数进行限制,限制同一时刻并发的个数,后面称此为“并发限流”。

    为什么要并发限流?

    虽然GO M+P+G的方式号称可以轻松支持上万的并发,但并不代表你的环境就可以这么任性的不限制并发。

    因为每个并发中都会消耗一定的资源,GO支持的起,系统环境本身支撑不起。

    支撑不起,就会出现进程崩溃、卡死等一系列我们不愿意看到的结果

    解决方式

    写一个公共的并发限流模块,将要调用的任务通过参数输入。

    代码示例

    待完善...

    并行理解举例

    func getNums(i *int)  chan int{
        c1 := make(chan int)
        go func(i *int) {
    
            c1 <- *i
            *i = *i + 1
        }(i)
        return c1
    }
        var i  = 0
    
        a := <- getNums(&i)
        //fmt.Print(a,i)
        fmt.Println(a)
        fmt.Println("i:",i)
    
        a = <- getNums(&i)
        //fmt.Print(a,i)
        fmt.Println(a)
        fmt.Println("i:",i)

    这样的输出结果是不确定的,会有以下两种结果

    0
    i: 0
    1
    i: 2
    0
    i: 1
    1
    i: 2

    主要看这两行代码执行与主程序打印执行的时机,谁先谁后

     c1 <- *i
     *i = *i + 1

    下面这种写法,输出结果将是唯一的

    func getNums(i *int)  chan int{
        c1 := make(chan int)
        go func(i *int) {
            *i = *i + 1
            c1 <- *i
            
        }(i)
        return c1
    }
  • 相关阅读:
    (转)OpenGL和D3D
    (转)海岸线提取完成, 海浪排岸效果
    (转)perlin噪声函数
    D3D 部分功能测试结论
    (转)学习directx遇到的问题
    D3D Lock Pool
    D3D渲染到纹理
    用Eclipse平台进行c/c++开发
    var读写和function读写,get/set读写效率比较
    flash fps游戏 fps多少为佳
  • 原文地址:https://www.cnblogs.com/perfei/p/12766408.html
Copyright © 2011-2022 走看看