当前位置: 首页 > 面试题库 >

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

邬令
2023-03-14
问题内容

有没有让maingoroutine永远睡眠的API ?

换句话说,我希望我的项目始终运行,除非停止它。


问题答案:

“睡眠”

您可以使用许多永久阻塞的构造,而不会“吃掉” 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 code...

    // 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够程可以返回,所以程序退出。



 类似资料:
  • 问题内容: 例如,有没有一种我可以执行的方法 然后在需要时“唤醒”睡眠的goroutine? 我看到里面有一个,但是我无法调用它。有什么想法吗? 问题答案: 没有办法中断,但是,您可以使用和语句来获取所需的功能。 一个简单的例子来展示基本思想: http://play.golang.org/p/7uKfItZbKG 在此示例中,我们生成了一个信令goroutine来告知main停止暂停。主要是在两

  • 问题内容: 我有产生新线程的执行主线程。在main()的执行主线程中,我正在调用。何时获得 未处理的异常 类型? 我不确定为什么会得到这个。我以为这是因为我需要对主线程的引用,所以我继续并通过进行了引用。 这不是让线程休眠的方法吗?我需要做的是让主线程等待/睡眠/延迟,直到它再次需要工作为止。 问题答案: 您看到的是编译错误,原因是您没有正确处理检查的异常(在这种情况下)。处理意味着执行以下操作之

  • 问题内容: 我想让系统进入睡眠或hibernate状态,这是两种不同的选择。 我将如何使用API​​进行此操作,我真的不想使用Process,并且这不允许我选择执行此操作所需的方法。 问题答案: 或者,如果您喜欢系统调用:

  • 问题内容: 这会使当前的UI线程休眠吗? 问题答案: 如果要在ui线程上调用sleep,它将阻塞ui线程。不要在ui线程上调用sleep。您不应该阻止ui线程。 http://developer.android.com/reference/java/lang/Thread.html http://docs.oracle.com/javase/tutorial/essential/concurren

  • Heroku WORKER Dyno(在python环境中运行)在30分钟后进入睡眠状态。工作人员执行芹菜期任务计划,向用户发送电子邮件。 下面是显示实际行为的日志: 根据研究,我的理解是dyno进入睡眠状态,但是dyno不会睡眠。https://devcenter.heroku.com/articles/free-dyno-hours: 如果一个应用程序有一个免费的网络dyno,并且dyno在3

  • 问题内容: 给出以下简单的Go程序 我想知道是否有人可以启发我 谢谢 问题答案: 由于您从不关闭通道,因此范围循环将永远不会结束。 您不能在同一频道上发送结果。一种解决方案是使用其他解决方案。 您的程序可以这样修改: