Kam*_*san -3 concurrency go goroutine
以下两个代码之间的基本区别是什么?不知何故,在第二个示例demo_process2()中从未被调用,但在第一个示例中工作正常。
go func() {
Must(demo_process1())
}()
demo_process2()
Run Code Online (Sandbox Code Playgroud)
go Must(demo_process1())
demo_process2()
Run Code Online (Sandbox Code Playgroud)
其中Must():
func Must(err error) {
if err != nil {
panic(err)
}
}
Run Code Online (Sandbox Code Playgroud)
函数值和参数在调用 goroutine 中照常评估,但与常规调用不同,程序执行不会等待调用的函数完成。相反,该函数开始在新的 goroutine 中独立执行。
在你的第一个例子中,你启动一个没有参数的匿名函数(一个函数文字)作为一个新的 goroutine。Must()并demo_process1()在其中调用,同时与demo_process2()(在“原始”goroutine 中执行)。
然而,在你的第二个例子中:
go Must(demo_process1())
demo_process2()
Run Code Online (Sandbox Code Playgroud)
作为 goroutine 启动的函数是Must(),其参数在调用 goroutine中求值。参数 ofMust()是 的返回值demo_process1(),表示demo_process1()在新的 goroutine 启动之前先被调用并等待。只有当它返回时,新的 goroutine 才能被启动和demo_process2()调用(在“原始”goroutine 上)。
总而言之,在第二个示例中demo_process1(),demo_process2()它们不是并发运行,而是在同一个 goroutine 中按顺序运行。仅在Must()新的 goroutine 上执行(与 并发demo_process2())。
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |