Tôi mới tham gia chương trình Go và gặp sự cố khi hiểu được đồng thời và kênh.Đồng thời và gây nhầm lẫn kênh
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
}
Đầu ra của chương trình là:
display first message: hello
10000000000
Nhưng tôi nghĩ rằng nó sẽ chỉ có một dòng:
display first message: hello
Vì vậy, trong các chức năng chính, < -c là chặn nó và chờ hai người kia đi rountines để gửi dữ liệu đến kênh. Khi chức năng chính nhận dữ liệu từ c, nó sẽ tiến hành và thoát.
hiển thị và tổng hợp chạy đồng thời và tổng mất nhiều thời gian để hiển thị nên gửi đúng với c và chương trình nên thoát trước khi tổng kết thúc ...
Tôi không chắc là tôi hiểu nó rõ ràng. Ai đó có thể giúp tôi với cái này được không? Cảm ơn bạn!
Như tux21b gợi ý, có thể là do 'thời gian chạy.GOMAXPROCS'. Bump nó lên, và bạn có thể thấy một sự khác biệt. – dyoo