【求助】:关于goroutine机制的疑惑

chris_kunkun · · 1298 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

最近在学习GO语言,想深究一下其中的协程机制,看了一些资料,大概的了解是在启动GO程序时,根据gomaxprocs的值创建n个执行线程,代码中生产的协程会放入到一个待执行队列中,每个线程从队列中获取协程并执行其中的代码。由于基于上面的认知,写了如下几段代码来验证下我的猜想: ```go func loopPrint(info string) { for { fmt.Println(info) } } func testforgoroutine() { fmt.Println(runtime.GOMAXPROCS(1)) //启动一个线程 go loopPrint("22222") go loopPrint("33333") go loopPrint("44444") go loopPrint("55555") for { fmt.Println("11111") } } func main() { testforgoroutine() //此时应该只会打印11111 } ``` 但实际的运行情况却是1-5的数据都有打印: ``` 11111 11111 11111 33333 55555 55555 ``` 我的理解是主协程中并没有引发阻塞等出让CPU情况,根据协程的特性应该是一直占用着才对。但实际情况看感觉go ***出的更像是一个线程而非协程,哪位大牛能解答一下这个疑惑呀,不慎感激(或者大家一起讨论一下) btw,我的环境是go version go1.7rc6 windows/386

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1298 次点击  
加入收藏 微博
7 回复  |  直到 2017-06-17 07:08:20
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传