栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

去例行阻止其他人

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

去例行阻止其他人

简短的回答:是的。

当前的实现在goroutines之间使用协作调度。这意味着goroutine必须将执行移交给调度程序,以便另一个goroutine运行。将来有希望使用不会有此限制的抢占式调度程序。

发生以下任何一种情况(可能不是完整的列表)时,Goroutine会屈服于调度程序:

  • 无缓冲的陈发送/接收
  • syscalls(包括文件/网络读取和写入)
  • 内存分配
  • time.Sleep()被调用
  • 调用runtime.Gosched()

最后一个允许您在处理器非常密集的循环中手动让步给调度程序。我从来没有发现过需要它的原因,因为我所使用的几乎所有东西都具有足够的通信(通道或系统io),以至于我的程序永远不会卡住。

您可能还会听到GOMAXPROCS,它是对此的解决方案。尽管可以通过将所有goroutine置于不同的线程中来运行它们,但垃圾收集器最终将尝试运行并停止世界。当它停止运行时,不允许运行goroutine,并且如果高cpugoroutine永不屈服,则GC将永远阻止goroutine,但永远不会运行。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/409575.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号