ゴーのドキュメントは言うこと:ゴルーチンがブロックされているかどうかをランタイムチェックで調べる方法はありますか?
、彼らが勝ったので、このようなブロッキングシステムコールを呼び出すのと同じコルーチンブロックは、実行時には自動的に別の、実行可能なスレッドに同じオペレーティング・システム・スレッド上の他のコルーチンを動かしますブロックされない
しかし、実行時にゴルーチンがブロックされていることをどのように検出するのですか?
たとえば、go-routineの1つで計算を実行すると、ブロック操作として評価されますか?
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