Почему оператор Go не выполняется параллельно?

Я тестирую этот код Go на моем VirtualBoxed Ubuntu 11.4

package main

import ("fmt";"time";"big")
var c chan *big.Int

func sum( start,stop,step int64) {
    bigStop := big.NewInt(stop)
    bigStep := big.NewInt(step)
    bigSum  := big.NewInt(0)
    for i := big.NewInt(start);i.Cmp(bigStop)<0 ;i.Add(i,bigStep){
        bigSum.Add(bigSum,i)
    }
    c<-bigSum           
}

func main() {
    s := big.NewInt( 0 )
    n := time.Nanoseconds()

    step := int64(4)
    c = make( chan *big.Int , int(step))
    stop := int64(100000000)
    for j:=int64(0);j<step;j++{
        go sum(j,stop,step)     
    }
    for j:=int64(0);j<step;j++{
        s.Add(s,<-c)
    }
    n = time.Nanoseconds() - n
    fmt.Println(s,float64(n)/1000000000.)
}

Ubuntu имеет доступ ко всем моим 4 ядрам. Я проверил это при одновременном запуске нескольких исполняемых файлов и системного монитора. Но когда я пытаюсь запустить этот код, он использует только одно ядро ​​и не получает никакой выгоды от параллельной обработки.

Что я делаю не так?

8
задан wasmup 1 April 2019 в 22:09
поделиться