Ich bin neu in Go und habe ein Problem, die Nebenläufigkeit und Kanal zu verstehen.Go Nebenläufigkeit und Kanal Verwirrung
package main
import "fmt"
func display(msg string, c chan bool){
fmt.Println("display first message:", msg)
c <- true
}
func sum(c chan bool){
sum := 0
for i:=0; i < 10000000000; i++ {
sum++
}
fmt.Println(sum)
c <- true
}
func main(){
c := make(chan bool)
go display("hello", c)
go sum(c)
<-c
}
Die Ausgabe des Programms ist:
display first message: hello
10000000000
Aber ich dachte, es sollte nur eine Zeile sein:
display first message: hello
So in der Hauptfunktion, < -c ist es blockiert und wartet darauf, dass die anderen zwei Routinen Daten an den Kanal senden. Sobald die Hauptfunktion die Daten von c empfängt, sollte sie fortfahren und beenden.
Anzeige und Summe laufen gleichzeitig und Summe dauert länger so Anzeige sollte wahr c schicken und das Programm sollte beenden, bevor Summe beendet ...
Ich bin nicht sicher, ich es klar zu verstehen. Könnte mir jemand dabei helfen? Vielen Dank!
Wie tux21b andeutet, liegt das wahrscheinlich an 'runtime.GOMAXPROCS'. Bump es, und Sie können einen Unterschied sehen. – dyoo