![image.png](https://static.studygolang.com/180416/51c6dbd5bde1b10a33061189ceb9ae0a.png)
这段代码不是会一直运行吗?为什么过了个10秒左右就会卡主了呢。
```
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() {
i := make(chan *info, 10)
go Handlego(i)
go inputGo(i, 1)
// for {
// //time.Sleep(1)
// }
select {}
```
刚刚了解了一下,不知道对不对,是因为for循环导致主协程空跑,不让出cpu时间片,在for里面加一个sleep强制让出时间片,或者改用select就可以了
#4
更多评论
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