运行下面的代码时,程序从1.5M左右开始,然后逐渐增长到6.4M。我想知道为什么。删除time.sleep解决了这个问题。有没有办法在默认情况下使用 for-select 模式并在默认情况下休眠一段时间而无需更改内存?在睡眠后调用runtime.GC()确实解决了这个问题。我们可以在不调用 GC 的情况下实现相同的目标吗?package mainimport ( "time")func main() { c := make(chan struct{}) for { select { case <-c: //some work default: //some work time.Sleep(time.Millisecond * 1) } }}同:package mainimport ( "time")func main() { c := make(chan struct{}) for { select { case <-c: case <-time.After(time.Millisecond * 10): } }}经过一段时间的研究,我使用以下代码实现了它。仍然想知道为什么 time.sleep 会增加内存使用率?package mainimport ( "time")func main() { c := make(chan bool) timer := time.NewTimer(0) for { select { case <-c: default: timer.Reset(time.Millisecond * 1) <-timer.C } }}
2 回答
潇湘沐
TA贡献1816条经验 获得超6个赞
您可以使用 a 实现超时select并从<-time.After()以下接收:
select {
case res := <-c:
fmt.Println("do some work")
case <-time.After(time.Second * 1):
fmt.Println("timeout")
}
如果您想了解您的程序如何使用内存,您可以进行分析。这是一篇关于这个主题的好文章。
拉莫斯之舞
TA贡献1820条经验 获得超10个赞
经过一段时间的研究,我使用以下代码实现了它。
package main
import (
"time"
)
func main() {
c := make(chan bool)
timer := time.NewTimer(0)
for {
select {
case <-c:
default:
timer.Reset(time.Millisecond * 1)
<-timer.C
}
}
}
- 2 回答
- 0 关注
- 296 浏览
添加回答
举报
0/150
提交
取消
