GoLang多任务执行效率性能

在执行一些昂贵的计算任务时,我们希望能够尽量利用现代服务器普遍具备的多核特性来尽量将任务并行化,从而达到降低总计算时间的目的。此时我们需要了解 CPU 核心的数量,并针对性地分解计算任务到多个 goroutine 中去并行运行。

GoLang多任务执行效率性能

例子:

funcmain11(){ more_cpu() one_cpu() } funcmore_cpu(){ gproc.StartTime() wait := sync.WaitGroup{} wait.Add(5) va := make(chanint64, 5) fori := 0; i < 5; i++ { goadd2(i, va, &wait) } wait.Wait() close(va) varsum int64= 0fora := rangeva { //fmt.Println(a) sum = sum + a }fmt.Println("more_cpu total time:", gproc.Uptime().String(), "sum=", sum) } funcone_cpu(){ gproc.StartTime() sum := 0fori := 0; i < 5; i++ { sum = sum + add(i) } fmt.Println("one_cpu total time:", gproc.Uptime().String(), "sum=", sum) } funcadd(i int)int{ re := 0fori := 0; i < 10000000; i++ { re = re + i } returnre} funcadd2(i int, c chanint64, wait *sync.WaitGroup){ deferwait.Done() re := 0fori := 0; i < 10000000; i++ { re = re + i } c <- int64(re) }

执行结果:

GoLang多任务执行效率性能

可以看到,充分利用多任务执行,性能提升明显。