Какой из них является идиоматическим?time.Sleep () или тикер? - PullRequest
0 голосов
/ 15 ноября 2018

Я должен выполнять некоторые высказывания каждую минуту. Я не уверен, что из следующего я должен следовать. Было бы здорово, если бы кто-то мог объяснить плюсы и минусы с точки зрения памяти и процессора.

time.Sleep ()

func main() {

go func() {
    for {
        time.Sleep(time.Minute)
        fmt.Println("Hi")
    }
}()

time.Sleep(10 * time.Minute) //just to keep main thread running

}

Или тикер

func main() {

go func() {
     for _ = range time.Tick(time.Minute) {
      fmt.Println("Hi")
     }

}()

time.Sleep(10 * time.Minute) //just to keep main thread running

}

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

В приведенном выше примере нет разницы. Но тикер также безопасен одновременно, так как использует каналы. Например, вы можете создать несколько рабочих, которые должны выполнять какую-то работу каждые 2 секунды, и вам нужно, чтобы один работник выполнял эту работу одновременно, чем вы используете тикер.

0 голосов
/ 15 ноября 2018

Из документов:

NewTicker возвращает новый тикер, содержащий канал, который будет отправлять время с периодом, заданным аргументом продолжительности.Он корректирует интервалы или сбрасывает галочки, чтобы компенсировать медленные приемники.Продолжительность d должна быть больше нуля;если нет, NewTicker будет паниковать.Остановите тикер, чтобы освободить связанные ресурсы.

time.Sleep просто ожидает указанное время и продолжает выполнение программы.Корректировка не выполняется, если остальная часть кода занимает больше времени.

Тикер учитывает время выполнения предоставленного блока и при необходимости пропускает интервал.

Представьте себе этот сценарий: Выукажите интервал в одну минуту, и выполнение вашего кода займет 10 секунд.

В вашей первой версии ваша программа выполняет ваш код в течение десяти секунд, а затем спит в течение 60 секунд.Практически он вызывается каждые 70 секунд.

Во второй версии ваш код выполняется в течение 10 секунд, затем тикер устанавливает время ожидания на 50 секунд.Ваш код выполняется точно каждую минуту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...