![image.png](https://static.studygolang.com/180416/51c6dbd5bde1b10a33061189ceb9ae0a.png)
这段代码不是会一直运行吗?为什么过了个10秒左右就会卡主了呢。
package main
import "log"
type info struct {
a int
}
func Handlego(i chan *info) {
for {
select {
case info := <-i:
log.Println("info-----", (*info).a)
}
}
}
func inputGo(i chan *info, num int) {
for {
iv := &info{
a: num,
}
i <- iv
log.Println("input go", num, i)
}
}
func main() {
var i chan *info
i = make(chan *info, 10)
go Handlego(i)
go inputGo(i, 1)
for {
}
}
这是文字版本
#1
更多评论
稍微测试了下。
第一,你代码写错了。最后有一个空跑的循环。
第二。之所以会停,是因为要golang需要gc,但又因为你的循环在空跑,就一直在等待gc。
具体可以在你的inputGo里加一个 num++
再在main加入debug.SetGCPercent(xx)
会发现每次停的位置和设置的gc优先度线性相关。
#2
```
func Handlego(i chan *info) {
for {
select {
case info := <-i:
log.Println("info-----", info.a)
}
}
}
func main() {
num := 0
i := make(chan *info, 10)
go Handlego(i)
//go inputGo(i, 1)
for {
num++
iv := &info{a: num}
i <- iv
log.Println("input go", num, i)
}
}
```
大概理解楼上大佬的意思,改写了一下,是因为空跑导致gc无法执行,具体解释还在查。。。有大佬解释一下吗
#3