我正在运行以下代码:https://play.golang.org/p/5bhXs_QulH
/opt/sybase/config
当我在笔记本电脑或操场上运行时,我得到了:
package main
import (
"fmt"
"time"
)
func main() {
startTime := time.Now()
foo := 0.200
fmt.Println(int((time.Now().UnixNano() - startTime.UnixNano()) / int64(time.Millisecond)))
time.Sleep(time.Duration(foo*1000) * time.Millisecond)
fmt.Println(int((time.Now().UnixNano() - startTime.UnixNano()) / int64(time.Millisecond)))
}
但是当我在虚拟机(VM)上运行它时,我得到:
0
200
我不是100%确定VM分配到哪个基础架构,但它是整个公司的企业基础架构,我认为它是VMWare。
有人能解释物理机和虚拟机之间的测量差异以及如何克服它并获得一致的睡眠时间吗?
答案 0 :(得分:-2)
我最终想出了以下内容:
func SleepMilliseconds(duration int, limit int) {
startTime := time.Now()
tempDuration := duration
for {
tempDuration = tempDuration / 2
time.Sleep(time.Duration(tempDuration) * time.Millisecond)
elapsed := int((time.Now().UnixNano() - startTime.UnixNano()) / int64(time.Millisecond))
tempDuration = duration - elapsed
if tempDuration < limit {
break
}
}
}
免责声明:我不认为这是一个合适的解决方案,也不会在我的项目中使用它,我只是把它放在极少数情况下,你的生活(或生产环境)是依赖的立即解决方案,你不知道还能做什么。