方式一 channel方式
func sum(tar []int, channel chan int) int {
result := 0
for _, i := range tar {
result += i
}
channel <- result
return result
}
func main() {
bT := time.Now() // 开始时间
var (
sign []int
double []int
)
resultChannel := make(chan int)
for i := 1; i <= 10000; i++ {
if i%2 == 0 {
double = append(double, i)
} else {
sign = append(sign, i)
}
continue
}
go sum(sign, resultChannel)
go sum(double, resultChannel)
signRes, doubleRes := <-resultChannel, <-resultChannel
log.Print("结果", signRes, doubleRes)
log.Print("结果之和", signRes+doubleRes)
//计算耗时
eT := time.Since(bT)
log.Print("耗时", eT)
}
=====控制台输出
2023/03/30 12:14:09 结果25005000 25000000
2023/03/30 12:14:09 结果之和50005000
2023/03/30 12:14:09 耗时9.2297ms
方式二 等待组
func main() {
bT := time.Now() // 开始时间
var (
sign []int
double []int
wg sync.WaitGroup
signRes int
doubleRes int
)
for i := 1; i <= 10000; i++ {
if i%2 == 0 {
double = append(double, i)
} else {
sign = append(sign, i)
}
continue
}
wg.Add(1)
go func(tar []int) {
result := 0
for _, i := range tar {
result += i
}
signRes = result
wg.Done()
}(sign)
wg.Add(1)
go func(tar []int) {
result := 0
for _, i := range tar {
result += i
}
doubleRes = result
wg.Done()
}(double)
wg.Wait()
//signRes, doubleRes
log.Print("结果", signRes, doubleRes)
log.Print("结果之和", signRes+doubleRes)
//计算耗时
eT := time.Since(bT)
// 9.9265ms
log.Print("耗时", eT)
}
======控制台输出
2023/03/30 12:14:58 结果25000000 25005000
2023/03/30 12:14:58 结果之和50005000
2023/03/30 12:14:58 耗时8.547ms