Sobes.tech
Junior — Middle

Wyjaśnij koncepcję konkurencji w języku programowania Go i jej rolę w rozwoju aplikacji równoległych

sobes.tech AI

Odpowiedź od AI

W języku Go konkurencja (concurrency) to zdolność programu do wykonywania wielu zadań jednocześnie, efektywnie wykorzystując zasoby procesora. W języku Go do tego służą goroutines, lekkie wątki uruchamiane za pomocą słowa kluczowego go.

Konkurencja pozwala na pisanie aplikacji równoległych, w których różne części kodu są wykonywane jednocześnie, co zwiększa wydajność i responsywność programów.

Do synchronizacji i wymiany danych między goroutines używa się kanałów (channels), które zapewniają bezpieczną komunikację bez jawnego użycia blokad.

Przykład:

package main
import (
    "fmt"
    "time"
)

func worker(id int) {
    fmt.Printf("Pracownik %d zaczyna\n", id)
    time.Sleep(time.Second)
    fmt.Printf("Pracownik %d kończy\n", id)
}

func main() {
    for i := 1; i <= 3; i++ {
        go worker(i) // uruchom goroutine
    }
    time.Sleep(2 * time.Second) // oczekiwanie na zakończenie goroutines
}

W tym przykładzie trzy goroutines działają jednocześnie, demonstrując konkurencję w Go.