이동 문서는 말한다 :goroutine이 차단 된 경우 실행 시간을 확인하는 방법은 무엇입니까?
그들이 원 때문에 이러한 차단 시스템 호출을 호출하여 같은 코 루틴 블록, 실행시 자동으로 다른, 실행 가능한 스레드로 동일한 운영 체제 스레드에서 다른 코 루틴으로 이동 차단되지 않습니다.
그러나 런타임시 goroutine이 차단되는 것을 어떻게 감지합니까?
예를 들어 go-routine 중 하나에서 계산을 실행하면 차단 작업으로 평가됩니까?
package main
import (
"fmt"
"runtime"
)
func f(from string, score int) {
for i := 0; i < score; i++ {
for z := 0; z < score; z++ {
}
}
fmt.Println(from, " Done")
}
func main() {
runtime.GOMAXPROCS(1)
f("direct", 300000)
go f("foo", 200000)
go f("bar", 20000)
go f("baz", 2000)
go func(msg string) {
fmt.Println(msg)
}("going without loop")
var input string
fmt.Scanln(&input)
fmt.Println("done")
}
나는 결과를 얻고있다 : baz, boo bar. 하지만 왜? foo
이 (가) 차단 중이라는 것을 알게 되나요?
http://blog.alexnesterov.com/post/coroutines-part-1/ 또한 재미있는 읽을 거리입니다 (Kotlin에 대해서는 Go라고도 함) – VonC