Sobes.tech
Junior

Czym są goroutines?

sobes.tech AI

Odpowiedź od AI

Lekki wątki wykonawcze, zarządzane przez środowisko wykonawcze Go. Tworzone są za pomocą słowa kluczowego go przed wywołaniem funkcji.

Główne cechy:

  • Mniejsze zużycie pamięci: Gorutyna zaczyna z małym rozmiarem stosu (zwykle 2 KB), który może się dynamicznie powiększać lub zmniejszać.
  • Szybsze tworzenie: Tworzenie gorutyny jest znacznie szybsze niż tworzenie wątku systemowego.
  • Multipleksowanie na wątki systemowe: Wiele gorutyn może być multipleksowanych na mniejszą liczbę wątków systemowych przez planistę Go.
  • Planowanie kooperatywne: Gorutyny nie są przerywane preemptively; dobrowolnie oddają kontrolę planistowi (np. podczas wywołań blokujących lub jawnych wywołań runtime.Gosched()).

Przykład tworzenia:

package main

import (
	"fmt"
	"time"
)

func sayHello() {
	fmt.Println("Cześć z gorutyny!")
}

func main() {
	go sayHello() // Uruchamia sayHello jako gorutynę
	fmt.Println("Cześć z funkcji głównej!")
	time.Sleep(1 * time.Second) // Aby funkcja główna nie zakończyła się wcześniej niż gorutyna
}

Porównanie z wątkami:

Cecha Gorutyny Go Wątki systemowe
Zarządzanie Środowisko wykonawcze Go System operacyjny
Zużycie pamięci Niskie, dynamiczny stos Wysokie, stały stos
Tworzenie Szybkie Wolne
Planowanie Kooperatywne Preemptive
Synchronizacja Kanały, pakiet sync Muteksy, semafory systemowe