"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 encerrar normalmente uma Goroutine em execução no Go?

Como encerrar normalmente uma Goroutine em execução no Go?

Publicado em 2024-11-04
Navegar:597

How to Gracefully Terminate a Running Goroutine in Go?

Sinalizando Goroutines para Terminar

No Go, lidar com o encerramento de goroutines pode ser crucial para garantir o encerramento normal do aplicativo ou gerenciar a alocação de recursos. Este artigo explora uma técnica para sinalizar uma goroutine em execução para interromper sua execução.

O exemplo fornecido na consulta demonstra uma goroutine que faz loops infinitos, simulando processamento contínuo. O objetivo é encerrar esta goroutine se ela exceder um tempo limite especificado.

Uma abordagem inicial envolve o uso de dois canais: um para comunicação e outro para sinalização de encerramento. No entanto, a leitura do canal de sinalização bloquearia a goroutine, anulando sua finalidade pretendida.

Usando um canal de parada adicional

Uma solução eficaz é introduzir um canal de parada adicional , tooLate, do tipo chan struct{}. Dentro da goroutine, uma instrução select é usada para monitorar o canal de comunicação e o canal de parada. Se o canal tooLate receber um valor, a goroutine retorna normalmente, encerrando seu loop de processamento.

Aqui está o trecho de código modificado:

func main() {
    // tooLate channel to signal goroutine to stop
    tooLate := make(chan struct{})
    proCh := make(chan string)

    go func() {
        for {
            fmt.Println("working")
            time.Sleep(1 * time.Second)

            select {
            case 

Nesta solução, o canal proCh continua a ser usado para comunicação, enquanto o canal tooLate serve como sinal para terminação. Quando o canal tooLate é fechado, a goroutine detecta isso e sai do loop.

Outras considerações

Além de usar um canal adicional, existem abordagens alternativas para sinalizar goroutines, como usar o tipo sync.Cond integrado para um controle mais refinado sobre a sincronização de goroutines. A escolha da técnica depende dos requisitos específicos da sua aplicação.

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