我正在编写一个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%,这似乎还可以,但是我猜这将因运行该程序的计算机而异。

最佳做法是什么?