Concorrência e Goroutines em Go

Concorrência e Goroutines em Go

Em Go, goroutines são threads leves que permitem a execução concorrente de funções. Elas são executadas de forma independente, permitindo que diferentes partes do seu programa sejam executadas simultaneamente.

Concorrência é como organizar várias tarefas de um programa para que elas possam ser feitas ao mesmo tempo, ou em partes, sem depender uma da outra. Mesmo assim, o resultado final é o mesmo que se fossem feitas uma após a outra. Usar concorrência ajuda a alcançar os mesmos objetivos em menos tempo, tornando nossos programas mais rápidos e eficientes.

Conceito de Goroutines:

    
      // Exemplo de criação de uma goroutine
      go func() {
          // Corpo da goroutine
      }()
    
  

Facilitando a Concorrência:

Goroutines simplificam a programação concorrente em Go, tornando mais fácil criar aplicativos que realizam tarefas simultaneamente. Com apenas uma simples palavra-chave go, você pode iniciar uma nova goroutine, como mostrado no exemplo acima.

Exemplo Prático:

    
      // Exemplo de uso de goroutines
      package main
      
      import (
          "fmt"
          "time"
      )
      
      func main() {
          // Iniciar uma nova goroutine
          go func() {
              for i := 0; i < 5; i++ {
                  fmt.Println("Goroutine:", i)
                  time.Sleep(time.Second)
              }
          }()
      
          // Aguardar um pouco para permitir que a goroutine execute
          time.Sleep(2 * time.Second)
          fmt.Println("Programa principal finalizado")
      }
    
  

Neste exemplo prático, uma nova goroutine é iniciada para imprimir números de 0 a 4. Enquanto isso, o programa principal continua sua execução. Isso demonstra como a concorrência pode ser facilmente alcançada com goroutines em Go.Adicionamos um sleep, para evitar o Race Condition

Goroutines são uma das características distintivas da linguagem Go, e são uma ferramenta poderosa para criar aplicativos concorrentes e paralelos de forma eficiente.

Comentários

Postagens mais visitadas deste blog

O outro lado do Ruby

Entendendo Estruturas de Dados: O Que São e Por Que São Importantes?

Entendendo a Notação Big O em Go