Ayu*_*ush 0 multithreading go goroutine
我正在运行一个服务器,其中 main 触发几个 go 例程。像这样:
main() {
go someFn(){
// will run for infinite time()
}
go otherFn()
}
Run Code Online (Sandbox Code Playgroud)
我有两个疑问:
如果main函数退出了怎么办?这些线程是否仍然会运行或者会随着 main 函数而终止?
如果不是,那么让主函数永远运行/或运行直到我需要它的最佳方法是什么?目前,我正在使用select{}命令使其永远运行!有没有比这更好、更有效的方法select{}
我建议完整地阅读语言规范\xe2\x80\x94 Go 是极少数语言之一,其语言规范实际上可以在两顿午餐的时间内阅读(或者一次 \xe2\x80\x94 如果这是你的,我不知道,第四种编程语言的第三种)。
\n引用它:
\n\n\n程序执行首先初始化
\nmain包,然后调用函数main。当该函数调用返回时,程序退出。它不会等待其他(非主)goroutines 完成。
我想补充一点,逻辑上让main所有非主 goroutine 等待将是一件坏事,原因有两个:
这很容易造成这样的情况:您可以等待程序关闭一段不确定的时间,即使您不希望这样(而且您并不总是希望这样)。
\n从逻辑上讲,这需要发明一种“特殊”方式来结束main\xe2\x80\x94 之类的东西,例如abort(3)C,并且拥有这种方式肯定会被滥用。
任何实际需要等待的 goroutine 的合理使用都需要根据语言规范及其内存模型进行显式同步 \xe2\x80\x94 。
\n也就是说,当你想要等待未完成的 goroutine 时,你必须明确地这样做。
| 归档时间: |
|
| 查看次数: |
4710 次 |
| 最近记录: |