求和小代码

 

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))

}

 

上一篇:(转)SignSGD 及其 MXNet 实现解读


下一篇:6 frame/iframe及窗口切换