运行下面的代码时,程序从1.5M左右开始,然后逐渐增长到6.4M。我想知道为什么。删除time.sleep解决了这个问题。
有没有办法在默认情况下使用 for-select 模式并在默认情况下休眠一段时间而无需更改内存?
在睡眠后调用runtime.GC()确实解决了这个问题。我们可以在不调用 GC 的情况下实现相同的目标吗?
package main
import (
"time"
)
func main() {
c := make(chan struct{})
for {
select {
case <-c:
//some work
default:
//some work
time.Sleep(time.Millisecond * 1)
}
}
}
同:
package main
import (
"time"
)
func main() {
c := make(chan struct{})
for {
select {
case <-c:
case <-time.After(time.Millisecond * 10):
}
}
}
经过一段时间的研究,我使用以下代码实现了它。仍然想知道为什么 time.sleep 会增加内存使用率?
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
}
}
}
潇湘沐
拉莫斯之舞
相关分类