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
    }
  • 相关阅读:
    Python实战:网络爬虫都能干什么?
    写了个脚本将json换成md
    RAC +MVVM
    Python 基础指令以及库管理工具pipenv
    CocoaPods创建自己的公开库、私有库
    python脚本解析json文件
    iOS 面试题
    路由器 大杂烩
    大数据挖掘基本概念
    Node.js实践
  • 原文地址:https://www.cnblogs.com/perfei/p/12766408.html
Copyright © 2011-2022 走看看