Sobes.tech
Junior

Mi a goroutine?

sobes.tech MI

Válasz az MI-től

Könnyű végrehajtási szálak, amelyeket a Go futtatókörnyezete kezel. A go kulcsszóval hozzák létre, mielőtt egy függvényt hívnánk.

Fő jellemzők:

  • Kevesebb memóriafelhasználás: A goroutine egy kis veremmérettel kezdődik (általában 2 KB), amely dinamikusan növelhető vagy csökkenthető.
  • Gyorsabb létrehozás: Egy goroutine létrehozása sokkal gyorsabb, mint egy rendszer szálé.
  • Multiplexálás rendszer szálakon: Sok goroutine multiplexálható kevesebb rendszer szálra a Go ütemezője által.
  • Kooperatív ütemezés: A goroutine-ok nem preemptíven szakadnak meg; önként adják át az irányítást az ütemezőnek (pl. blokkoló hívások vagy explicit runtime.Gosched() hívások esetén).

Létrehozási példa:

package main

import (
	"fmt"
	"time"
)

func sayHello() {
	fmt.Println("Helló a goroutine-ból!")
}

func main() {
	go sayHello() // A sayHello-t goroutine-ként indítja
	fmt.Println("Helló a fő függvényből!")
	time.Sleep(1 * time.Second) // Hogy a fő függvény ne érjen véget a goroutine előtt
}

Összehasonlítás szálakkal:

Jellemző Go goroutine-ok Rendszer szálak
Kezelés Go futtatókörnyezete Operációs rendszer
Memóriafelhasználás Alacsony, dinamikus verem Magas, fix verem
Létrehozás Gyors Lassú
Ütemezés Kooperatív Preemptív
Szinkronizáció Csatornák, sync csomag Mutexek, OS szemináriumok