GoLang多任务执行效率性能

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


GoLang多任务执行效率性能


例子:

<code>func main11() {
more_cpu()
one_cpu()
}

func more_cpu() {
gproc.StartTime()
wait := sync.WaitGroup{}
wait.Add(5)
va := make(chan int64, 5)

for i := 0; i < 5; i++ {
go add2(i, va, &wait)
}
wait.Wait()
close(va)

var sum int64 = 0 for a := range va {
//fmt.Println(a) sum = sum + a }
fmt.Println("more_cpu total time:", gproc.Uptime().String(), "sum=", sum)
}

func one_cpu() {
gproc.StartTime()
sum := 0 for i := 0; i < 5; i++ {
sum = sum + add(i)
}

fmt.Println("one_cpu total time:", gproc.Uptime().String(), "sum=", sum)
}
func add(i int) int {
re := 0 for i := 0; i < 10000000; i++ {
re = re + i }
return re}
func add2(i int, c chan int64, wait *sync.WaitGroup) {
defer wait.Done()
re := 0 for i := 0; i < 10000000; i++ {
re = re + i }
c }/<code>

执行结果:

GoLang多任务执行效率性能

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


分享到:


相關文章: