"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como a palavra-chave Defer do Go pode ser usada para criar um perfil preciso do tempo de execução da função?

Como a palavra-chave Defer do Go pode ser usada para criar um perfil preciso do tempo de execução da função?

Publicado em 2024-11-11
Navegar:929

How Can Go's Defer Keyword Be Used to Accurately Profile Function Runtime?

Tempo de execução da função de criação de perfil em Go: uma abordagem diferida de precisão

No domínio da otimização de software, medir o tempo de execução da função pode fornecer insights valiosos para melhorando a eficiência. Go, uma linguagem de programação robusta, oferece um mecanismo conveniente para cronometrar funções e retornar seu tempo de execução em milissegundos.

A função medida pelo tempo

Para iniciar nossa aventura, vamos crie uma função que queremos criar o perfil. Este exemplo simplesmente dorme por um período especificado:

func SleepFor(d time.Duration) {
    time.Sleep(d)
}

Go's Defer Advantage

A palavra-chave defer de Go prova ser fundamental nesse esforço. Ao adiar a execução de uma função até que a função envolvente termine, podemos medir o tempo decorrido entre a chamada da função e sua execução real.

Código de medição de tempo

Vamos introduza duas funções auxiliares, apropriadamente denominadas trace e un. Trace registra o ponto de entrada da função e captura o horário de início, enquanto desfaz o registro do ponto de saída e calcula o tempo decorrido em segundos.

func trace(s string) (string, time.Time) {
    log.Println("START:", s)
    return s, time.Now()
}

func un(s string, startTime time.Time) {
    endTime := time.Now()
    log.Println("  END:", s, "ElapsedTime in seconds:", endTime.Sub(startTime))
}

Implementando o tempo

Agora, vamos incorporar essas funções auxiliares em nossa função SleepFor:

func profileSleep(d time.Duration) {
    defer un(trace("SleepFor"))

    SleepFor(d)
}

Squeaky Clean Results

Com esta implementação elegante, obtemos registros de tempo decorrido concisos para cada chamada de função:

START: profileSleep
  END: profileSleep ElapsedTime in seconds: 0.50044

Considerações sobre precisão

Embora os registros forneçam tempos decorridos precisos, é importante notar que as próprias instruções de registro apresentam uma ligeira imprecisão. Se for necessária maior precisão, considere um mecanismo de temporização alternativo.

Conclusão

Aproveitar o adiamento do Go torna as funções de temporização e a obtenção de seu tempo de execução em milissegundos muito fácil. Essa técnica poderosa permite insights sobre o desempenho do código, abrindo caminho para otimizações para melhorar a eficiência de seus aplicativos.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3