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 并发的资料请关注其它相关文章!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- dnf称号附魔
- 乌兰托娅.2024-《八月草儿飞HQ》头版限量编号[低速原抓WAV+CUE]
- 雷婷.2024-《寂寞烟火HQ》头版限量编号[低速原抓WAV+CUE]
- [ABC唱片]-《西电之声—人声》[HD-201][德国版HD]WAV+CUE
- dnf紧急任务怎么触发
- dnf紫牌能翻出什么
- 星穹铁道2.2上升的一切必将汇合怎么过 上升的一切必将汇合流程攻略
- [ABC唱片]-《西电之声—人声》[HD-201][德国版HD]WAV+CUE
- 【ABC唱片】《春花秋月古筝三重奏SACD》-WAV分轨
- [ABC唱片]-《邓丽君—永远的歌声(日语)》[K2-029][K2CD]WAV+CUE
- 吴牧野《强者独白II 李斯特巅峰作品选》[FLAC/分轨][286.41MB]
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 林俊杰《他是... JJ林俊杰》[FLAC][809M]
- dnf红眼110版本加点
- 星穹铁道2.2主线任务在我们的时代里全流程 崩铁2.2主线任务合集