Estoy probando este código ir en mi Ubuntu VirtualBoxed 11,4¿Por qué la sentencia go no se ejecuta en paralelo?
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 tiene acceso a todos mis 4 núcleos. Lo comprobé con la ejecución simultánea de varios ejecutables y System Monitor. Pero cuando intento ejecutar este código, está usando solo un núcleo y no está obteniendo ningún beneficio del procesamiento paralelo.
¿Qué estoy haciendo mal?
también tenga en cuenta que el valor predeterminado parece ser "1" – mnagel
El valor predeterminado con go1.6.3 en OSX 10.11 es la cantidad de núcleos de CPU. Creo que fue cambiado en Go v1.5. – Xeoncross