圆月山庄资源网 Design By www.vgjia.com
golang 天生语言层面支持并发, 非常棒的语言, 有时我们业务开发时, 遇到复杂场景, 需要用于并发, 将多个请求使用协程组完成并发, 当遇到嵌套循环,还存在上下文关系需要改造为并发请求, 将之前的时间复杂度为O(n^2)改为O(n)的时间复杂度, 那是否还能否并时间复杂度进一步降为O(1)呢"htmlcode">
// 串行执行 func SerializeRun() { start := time.Now() xx := []int{1, 2, 3} yy := []int{100, 200, 300} for _, x := range xx { for _, y := range yy { abc(x, y) } } fmt.Printf("串行执行总时间:%s\n", time.Since(start)) } func abc(x, y int) { time.Sleep(time.Second * 1) fmt.Printf("x:%d, y:%d\n", x, y) }
执行结果
x:1, y:100
x:1, y:200
x:1, y:300
x:2, y:100
x:2, y:200
x:2, y:300
x:3, y:100
x:3, y:200
x:3, y:300
串行执行总时间:9.0026338s
单协程组并发
- 使用了协程组将O(n^2)降为O(n)
- 结果执行时间为 3s
// 单并行执行 func SingleConcurrenceRun() { start := time.Now() xx := []int{1, 2, 3} yy := []int{100, 200, 300} for _, x := range xx { wgg := sync.WaitGroup{} for _, y := range yy { wgg.Add(1) go func(x, y int) { defer wgg.Done() abc(x, y) }(x, y) } wgg.Wait() } fmt.Printf("单并行执行总时间:%s\n", time.Since(start)) } func abc(x, y int) { time.Sleep(time.Second * 1) fmt.Printf("x:%d, y:%d\n", x, y) }
结果
x:1, y:300
x:1, y:200
x:1, y:100
x:2, y:100
x:2, y:200
x:2, y:300
x:3, y:300
x:3, y:100
x:3, y:200
单并行执行总时间:3.0013813s
嵌套并发执行
- 使用嵌套协程组执行并发.
- 将O(n^2)降到O(1)
- 结果执行时间为 1s
// 嵌套执行 func NestConcurrenceRun() { xx := []int{1, 2, 3} yy := []int{100, 200, 300} start := time.Now() wgg := sync.WaitGroup{} for _, x := range xx { wgg.Add(1) go func(x int) { wg := sync.WaitGroup{} for _, y := range yy { wg.Add(1) go func(x, y int) { defer wg.Done() abc(x, y) }(x, y) } wg.Wait() wgg.Done() }(x) } wgg.Wait() fmt.Printf("嵌套并发执行总时间:%s\n", time.Since(start)) } func abc(x, y int) { time.Sleep(time.Second * 1) fmt.Printf("x:%d, y:%d\n", x, y) }
结果
x:1, y:200
x:3, y:300
x:3, y:200
x:1, y:300
x:2, y:200
x:1, y:100
x:2, y:300
x:2, y:100
x:3, y:100
嵌套并发执行总时间:1.0023542s
以上就是详解Go 并发的详细内容,更多关于Go 并发的资料请关注其它相关文章!
标签:
go,并发
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
更新日志
2024年11月15日
2024年11月15日
- 黄乙玲1988-无稳定的爱心肝乱糟糟[日本东芝1M版][WAV+CUE]
- 群星《我们的歌第六季 第3期》[320K/MP3][70.68MB]
- 群星《我们的歌第六季 第3期》[FLAC/分轨][369.48MB]
- 群星《燃!沙排少女 影视原声带》[320K/MP3][175.61MB]
- 乱斗海盗瞎6胜卡组推荐一览 深暗领域乱斗海盗瞎卡组分享
- 炉石传说乱斗6胜卡组分享一览 深暗领域乱斗6胜卡组代码推荐
- 炉石传说乱斗本周卡组合集 乱斗模式卡组最新推荐
- 佟妍.2015-七窍玲珑心【万马旦】【WAV+CUE】
- 叶振棠陈晓慧.1986-龙的心·俘虏你(2006复黑限量版)【永恒】【WAV+CUE】
- 陈慧琳.1998-爱我不爱(国)【福茂】【WAV+CUE】
- 咪咕快游豪礼放送,百元京东卡、海量欢乐豆就在咪咕咪粉节!
- 双11百吋大屏焕新“热”,海信AI画质电视成最大赢家
- 海信电视E8N Ultra:真正的百吋,不止是大!
- 曾庆瑜1990-曾庆瑜历年精选[派森][WAV+CUE]
- 叶玉卿1999-深情之选[飞图][WAV+CUE]