Jestem nowym użytkownikiem Go i mam problem ze zrozumieniem współbieżności i kanału.Go współbieżność i zamieszanie kanału
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
}
Wyjście programu jest:
display first message: hello
10000000000
Ale myślałem, powinno być tylko jedna linia:
display first message: hello
więc w głównej funkcji < -c blokuje go i czeka, aż pozostałe dwa przejdą rountines do wysłania danych do kanału. Gdy główna funkcja odbiera dane z c, powinna kontynuować i wyjść.
wyświetlacz i uruchomić jednocześnie suma i suma trwa dłużej tak Wyświetlacz powinien wysłać prawdziwe C, a program powinien zakończyć zanim zakończy suma ...
Nie jestem pewien, czy rozumiem go wyraźnie. Czy ktoś może mi w tym pomóc? Dziękuję Ci!
Zgodnie z sugestią tux21b, jest to prawdopodobnie spowodowane 'runtime.GOMAXPROCS'. Podbij to i możesz zauważyć różnicę. – dyoo