在 Windows 上诊断非执行 Goroutine
为了深入研究 Goroutine 的复杂性,进行了一个简化的测试来观察它们的情况行为。然而,“测试”的预期结果从未实现。尽管包含了 for {} 循环来为 goroutine 提供充足的时间,但程序仍然保持沉默,没有留下任何错误或成功的痕迹。
揭开问题
经过仔细检查,很明显问题的症结在于 goroutine 的异步性质。与以阻塞方式顺序执行的传统线程不同,goroutine 被设计为并发运行,不会阻碍主程序的执行。因此,程序执行不会暂停以适应调用函数的完成。
解决难题
为了纠正这种情况并允许正确观察 goroutine 的输出,需要一个时间可以引入.Sleep()语句。该语句将 main 函数的执行暂停指定的持续时间,为 goroutine 完成其工作提供足够的时间。通过将持续时间设置为非零值,例如 10 秒,goroutine 有足够的机会在主函数终止之前执行和打印其输出。
改进的测试用例
修改后的测试用例合并了 time.Sleep() 语句,如下所示:
<code class="go">package main import ( "fmt" "time" ) func test() { fmt.Println("test") } func main() { go test() time.Sleep(10 * time.Second) }</code>
通过此修改,程序现在成功执行 test() goroutine 并将“test”打印到安慰。这种方法确保 main 函数在终止之前等待 goroutine 完成,从而可以对其行为进行可见观察。
以上是为什么我的 Goroutine 在 Windows 上不执行?的详细内容。更多信息请关注PHP中文网其他相关文章!