Problème :
Considérez l'extrait de code Go donné :
<code class="go">package main import ( "fmt" "math/rand" "time" ) func main() { for i := 0; i < 3; i++ { go f(i) } // prevent main from exiting immediately var input string fmt.Scanln(&input) } func f(n int) { for i := 0; i < 10; i++ { dowork(n, i) amt := time.Duration(rand.Intn(250)) time.Sleep(time.Millisecond * amt) } } func dowork(goroutine, loopindex int) { // simulate work time.Sleep(time.Second * time.Duration(5)) fmt.Printf("gr[%d]: i=%d\n", goroutine, loopindex) }</code>
Questions :
Réponse :
Concernant GOMAXPROCS :
Selon les notes de version de Go 1.5 :
"Par défaut, les programmes Go s'exécutent avec GOMAXPROCS défini sur le nombre de cœurs disponibles ; dans les versions précédentes, la valeur par défaut était 1."
Concernant Empêcher la sortie de la fonction principale :
Pour empêcher la fonction « principale » de se fermer immédiatement, le type « WaitGroup » peut être utilisé, en particulier la fonction « Attendre ».
Concernant le parallélisme :
Pour faciliter le traitement parallèle de groupes de fonctions, une fonction d'assistance peut être utilisée :
<code class="go">import "sync" // Parallelize executes functions concurrently func Parallelize(functions ...func()) { var waitGroup sync.WaitGroup waitGroup.Add(len(functions)) defer waitGroup.Wait() for _, function := range functions { go func(f func()) { defer waitGroup.Done() f() }(function) } }</code>
Dans votre cas, le parallélisme peut être réalisé comme suit :
<code class="go">func1 := func() { f(0) } func2 = func() { f(1) } func3 = func() { f(2) } Parallelize(func1, func2, func3)</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!