Я новичок в Go, и у меня проблемы с пониманием параллелизма и канала.
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
}
Результат программы:
display first message: hello
10000000000
Но я подумал, что это должна быть только одна строка:
display first message: hello
Итак, в основной функции ‹-c блокирует ее и ожидает, пока два других не перейдут к отправке данных в канал. Как только основная функция получит данные от c, она должна продолжить и выйти.
отображение и сумма запускаются одновременно, и сумма занимает больше времени, поэтому display должен отправить true в c, и программа должна выйти до завершения суммы ...
Я не уверен, что понимаю это ясно. Может ли кто-нибудь помочь мне с этим? Спасибо!
runtime.GOMAXPROCS
. Поднимите его, и вы увидите разницу. - person dyoo   schedule 23.08.2013