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

永远进入项目的主要goroutine睡眠状态?

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

永远进入项目的主要goroutine睡眠状态?

“睡眠”

您可以使用许多永久阻塞的构造,而不会“吃掉” CPU。

例如,

select
不带任何
case
(且不带
default
)的a:

select{}

或从没有人发送任何东西的渠道接收:

<-make(chan int)

或从

nil
频道接收也会永远阻止:

<-(chan int)(nil)

或在

nil
频道上发送也会永远被阻止:

(chan int)(nil) <- 0

或锁定已经锁定的

sync.Mutex

mu := sync.Mutex{}mu.Lock()mu.Lock()

戒烟

如果您确实想提供一种退出方法,则可以通过一个简单的渠道来完成。提供一个

quit
频道,并从中接收。当您要退出时,请关闭
quit
通道,因为“
关闭的通道上的接收操作始终可以立即进行,在接收到任何先前发送的值之后,将产生元素类型的零值
”。

var quit = make(chan struct{})func main() {    // Startup pre...    // Then blocking (waiting for quit signal):    <-quit}// And in another goroutine if you want to quit:close(quit)

请注意,发出

close(quit)
可能会随时终止您的应用。引用规范:程序执行:

程序执行首先初始化主程序包,然后调用函数

main
。当该函数调用返回时,程序退出。 它不等待其他(非
main
)goroutine完成。

close(quit)
被执行时,我们的最后一条语句
main()
的功能可以继续在该装置
main
够程可以返回,所以程序退出。



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

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

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