我正在编写一个Go程序,该程序监视文件并在其中一个文件已更改的情况下运行系统命令。到目前为止,它运行良好。我对主“无限”循环有疑问,因为我不希望它占用所有系统CPU资源:
runtime.GOMAXPROCS(1)
for {
updatedFiles, _ := GetWatchMap(config)
if !reflect.DeepEqual(filesToWatch, updatedFiles) {
start := time.Now()
_, _ = colorstring.Println(fmt.Sprintf(" [yellow] ⬇ Update detected[white] at [green]%s[white] > updating...", start.Format("15:04:05")))
_, _ = Update(config)
end := time.Now()
elapsed := end.Sub(start)
_, _ = colorstring.Println(fmt.Sprintf(" [green]✅ Done![white] in [yellow]%.2f[white] second(s).", elapsed.Seconds()))
filesToWatch = updatedFiles
} else {
time.Sleep(config.SleepTime)
}
}
因此,我所做的是设置GOMAXPROCS,因此它仅使用“ 1 CPU / Core”,并且在else分支中添加了可配置的睡眠时间。
runtime.GOMAXPROCS(1)
如果我在计算机(MacMini i7,12核心)上使用30ms的睡眠时间,则htop报告该进程的CPU使用率为20%,这似乎还可以,但是我猜这将因运行该程序的计算机而异。
最佳做法是什么?