Sobes.tech
Junior — Middle

Wie werden Konkurrenz, Asynchronität und Parallelität in der Programmiersprache Go umgesetzt?

sobes.tech KI

Antwort von AI

In Go werden Konkurrenz, Asynchronität und Parallelität mithilfe von Goroutines und Kanälen umgesetzt.

  • Goroutines sind leichte Threads, die mit dem Schlüsselwort go gestartet werden. Sie ermöglichen die asynchrone Ausführung von Funktionen und konkurrieren um Ressourcen.
  • Kanäle werden verwendet, um Daten sicher zwischen Goroutines auszutauschen, wobei Synchronisation und Nachrichtenübertragung gewährleistet sind.

Parallelität wird erreicht, indem mehrere Goroutines gestartet werden, die gleichzeitig auf mehreren CPU-Kernen laufen können, wenn GOMAXPROCS gesetzt ist.

Beispiel:

package main
import (
    "fmt"
    "time"
)

func worker(id int, ch chan string) {
    time.Sleep(time.Second)
    ch <- fmt.Sprintf("Worker %d fertig", id)
}

func main() {
    ch := make(chan string)
    for i := 1; i <= 3; i++ {
        go worker(i, ch) // startet eine Goroutine
    }
    for i := 1; i <= 3; i++ {
        msg := <-ch // erhält das Ergebnis vom Kanal
        fmt.Println(msg)
    }
}

Auf diese Weise bietet Go einfache und effiziente Mittel für die Arbeit mit Konkurrenz und Parallelität.