您的位置 首页 golang

golang多核并发运算的优势-goroutine

Show u all code

 package main
import (
	"runtime"
	"time"
)
//32s
func sum() {
  var i,sum, j int64
	i = 100000000000
	sum = 0

	for j = 0; j<i; j++ {
		sum += j
	}
	println(sum)
}
//6s
func sum1() {
	n := runtime.GOMAXPROCS(0)
	ch := make(chan int, n)
	i := 100000000000
	for j:=0; j<n;j++ {
		//分段计算
		go func(k int, c chan<-int) {
			sum := 0
			start := (i/n)*k
			end := start + (i/n)
			for l:=start; l<end;l++ {
				sum+=l
			}
			c <- sum
		}(j, ch)
	}
	total := 0
	for m :=0; m<n;m++ {
		total += <-ch
	}
	defer println(total)
}
func main() {
	s := time.Now().UnixNano()
	sum()
	e := time.Now().UnixNano()
	println("sum()单核计算100亿时长:nano secs:", e-s)
	s1 := time.Now().UnixNano()
	sum1()
	e1 := time.Now().UnixNano()
	println("sum1()8核计算100亿时长:nano secs:", e1-s1)
}
  

需求

计算出100亿整数累加总和,体现出goroutine的计算优势

输出结果

 932355974711512064
sum()单核计算100亿时长:nano secs: 32340388000
932355974711512064
sum1()8核计算100亿时长:nano secs: 6258451000  

计算结果已经超出了int和int64的的长度,并不重要,重要的是体会一下多核并发计算的优势。sum方法用了32s,sum1用了6s,提升4倍左右的效率。

goroutine的原理可以参考下 ,写得很清晰了。

重点是要理解它的核心思想“ CSP(communicating sequential processes)并发模型 ”。

如果想看用户态和系统负载情况可以这样操作

 go build main.go
time ./main  

输出:

 932355974711512064
sum1()8核计算100亿时长:nano secs: 6435188000
./te  46.91s user 0.24s system 730% cpu 6.446 total
  

mac下的time有毒,不能格式化

CPU负载达到了730%,

文章来源:智云一二三科技

文章标题:golang多核并发运算的优势-goroutine

文章地址:https://www.zhihuclub.com/98369.shtml

关于作者: 智云科技

热门文章

网站地图