Чтобы рассчитать временной интервал в Go, вы можете использовать
start := time.Now() // long time consuming task duration := time.Since(start)
Но знаете ли вы, что пакет времени в Go на самом деле содержит два времени, и time.Since() на самом деле измеряет только время обработки (монотонные часы), а не реальное время (настенные часы)?
Например, если задача довольно длинная, длилась всю ночь, и ваш компьютер перешел в спящий режим. Затем утром вы можете прийти и увидеть, что продолжительность длится всего 4 часа, хотя всего прошло 10 часов.
Пакет времени в Go гласит, что
Операционные системы предоставляют как «настенные часы», которые могут быть изменены для синхронизации часов, так и «монотонные часы», которые не являются таковыми. Общее правило таково: настенные часы предназначены для определения времени, а монотонные — для измерения времени.
В приведенном выше примере на самом деле вы говорите о том, что ваша программа активно работала в течение 4 часов, но компьютер спит 6 часов, поэтому в общей сложности вы ждали 10 часов. Если бы компьютер не спал, это было бы сделано за 4 часа.
Так что же делать, если вы хотите измерить время стены? Вы можете использовать функцию Round(0). t = t.Round(0) удалит монотонные часы в t.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3