gpt4 book ai didi

在包中定义的方法中调用的 Goroutine 不运行

转载 作者:数据小太阳 更新时间:2023-10-29 03:17:31 25 4
gpt4 key购买 nike

我只是想知道如果在包中定义的方法中调用的 goroutine 可能无法运行。

这是我的示例程序的结构:

sample
├── abc
│   └── abc.go
└── main.go

下面是abc.go和main.go的源码

abc.go

1 package abc
2
3 import (
4 "fmt"
5 )
6
7 func PrintCde() {
8 fmt.Println("Cde")
9 }
10
11
12 type Abc struct {}
13
14 func (a Abc)PrintAbc() {
15 fmt.Println("Abc")
16 go PrintCde()
17 for {}
18 }

ma​​in.go

1 package main
2
3 import (
4 "sample/abc"
5 )
6
7 func main() {
8 var a abc.Abc
9 a.PrintAbc()
10
11 }

然后,如果我运行该程序,我永远不会在屏幕上打印字符串“Cde”。

我能猜到的是 PrintAbc 方法中的 for 循环占用了计算资源,函数 PrintCde 从未被安排运行。

如果是这个原因,有没有其他方法可以防止PrintAbc方法从retruning但不占用资源让函数printCde运行?

最佳答案

是的,空的/无限的 for 通常会导致这个问题。为此,请改用空的 select{},这是一个阻塞 操作,它会鼓励/强制运行时交换 Goroutine。其他选项包括增加 GOMAXPROCS 或(在实际程序中)使用类似 sync.WaitGroup 的东西来等待另一个 Goroutine 完成处理,然后自然终止程序。

关于在包中定义的方法中调用的 Goroutine 不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24391738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com