go:多核並行化問題

來源:互聯網
上載者:User

標籤:

分別用串列和並行實現了一個1億*1000次加法的程式,代碼如下:

package mainimport ("fmt"//"runtime"//執行並行段時需要引入該包"time")const (NUM = 100000000)type vint struct {n []int}func (v vint) Doadd(p, i, n int, u []int, c chan int) {tempv=v.n[p]for j := 0; j < 1000; j++ {for ti := i; ti < n; ti++ {v.n[p] += u[ti]}v.n[p]=tempv//重設v.n[p]}c <- 1return}func (v vint) Doall(ncpu int, u []int) (sum int) {c := make(chan int, ncpu)segment := NUM / ncpufor i := 0; i < ncpu; i++ {go v.Doadd(i, i*segment, (i+1)*segment, u, c)}for i := 0; i < ncpu; i++ {<-c}for i := 0; i < ncpu; i++ {sum += v.n[i]}return}func main() {/*並行段ncpu := runtime.NumCPU()runtime.GOMAXPROCS(ncpu)u := make([]int, NUM)for i := 0; i < NUM; i++ {u[i] = 1}v := new(vint)v.n = make([]int, ncpu)ts := time.Now().UnixNano()sum := v.Doall(ncpu, u)te := time.Now().UnixNano()fmt.Println((te - ts), sum)*///串列段u := make([]int, NUM)for i := 0; i < NUM; i++ {u[i] = 1}ts := time.Now().UnixNano()for j := 0; j < 1000; j++ {sum := 0for i := 0; i < NUM; i++ {sum += u[i]}}te := time.Now().UnixNano()fmt.Println((te - ts))return}

 

串列和並存執行的結果如下: 

8核並行化時間: 105026.076ms                                      串列時間: 80704.4503ms

                                   

由結果可知,並行化的時間開銷反而比串列大,若各位知道原因,希望能在評論區回複解答

go:多核並行化問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.