package main import ( "fmt" "runtime" ) /* runtime.Gosched() 可以当做接力赛来处理 场景:学校接力赛,一共跑两圈。A B学生一人一圈。半圈一换 go echo("next program")比赛开始了 遇到 runtime.Gosched() A学生跑完了半圈。先歇会有点累,棒子给 B学生 echo("prev program") B学生开跑。 runtime.Gosched() 上次的传递还没完。继续往下跑 fmt.Println(s) 跑完了。给A学生让他跑。 完成后 继续 执行 (比赛开始了) 再次 进行推 遇到 runtime.Gosched() A学生跑完了。先歇会有点累,棒子给 B学生 echo("prev program") B学生开跑。 runtime.Gosched() 上次的传递还没完。继续往下跑 fmt.Println(s) 跑完了。继续给A学生让他跑。 最后一次传递给A学生 是看不到的 因为这个时候程序已经结束了,当然你可以给一个程序延迟 可以看到最后的传递 */ func echo(s string) { for i := 0; i < 2; i++ { runtime.Gosched() fmt.Println(s) } } func main() { go echo("A学生") echo("B学生") }
有疑问加站长微信联系(非本文作者)