在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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 }
|
请发表评论