두 가지 이상한 점이 있습니다. goroutine을 다룰 때 이상한 점
- 나는 조각 1000 개 번호를 만들었지 만 그것은 그냥 천 (246), 왜 246? 그리고 왜 인쇄?
"log.Println ("hey ")"이 줄을 삭제하면 왜 그냥 0이 인쇄됩니까?
동기화 문제가있을 수 있지만 이전에 동의 프로그램을 작성하지 않았으므로 어떤 기사라도 좋습니다.
import (
"log"
"runtime"
)
func main() {
count := 1000
slice := make([] int,count)
for i := 0; i <= count-1; i++ {
slice[i] =i
}
for _,v := range slice{
go echo(v)
}
log.Println("hey")//if delete this line,it just print 0
runtime.Gosched()
}
func echo(v int) {
log.Println(v)
}
하지만 난 마지막에 runtime.Gosched을()가 호출, 다른 사람이 백 우측 goroutines 때까지 주()을 기다려야한다? –
@MaxLau, 아니, 그렇지 않습니다. 'runtime.Gosched()'는 스케줄러에게 다른 goroutine에 제어 흐름을 전달하도록 요청하지만, 다른 goroutine이'runtime.Gosched()'를 호출하거나 동등한 작업을 수행 할 때 제어 흐름이'main'으로 되돌아가는 것을 결코 막지 않습니다 스케줄링 측면에서의 행동. 실제로'Gosched()'호출은 다른 goroutine을 잠깐 동안 실행하게하고, 메인 goroutine은 다시 실행되어 그 직후에 종료됩니다. –