package main import ( "log" "sync" "time" ) func main() { block := 12 //分块数,可以调整测试 N := 1000000000 //最大数 ch := make(chan int, block) exit := make(chan int) var wd sync.WaitGroup wd.Add(block) now := time.Now() for i := 0; i < block; i++ { n := i go func() { defer wd.Done() block_sum := 0 start, end := (N+1)*n/block, (N+1)*(n+1)/block log.Println("n=", n, "start=", start, "end=", end) for j := start; j < end; j++ { block_sum += j } ch <- block_sum }() } go func() { sum := 0 for block_sum := range ch { sum += block_sum } log.Println("channel关闭退出...") exit <- sum }() wd.Wait() log.Println("任务结束...") close(ch) log.Println("sum=", <-exit) log.Println("sec=", time.Since(now)) }