Sobes.tech
Junior — Middle

Meg tudná magyarázni, hogyan valósult meg a feladatütemező mechanizmusa a rendszerben?

sobes.tech MI

Válasz az MI-től

A Go-ban a ütemező (scheduler) a runtime részeként van megvalósítva, és felelős a goroutine-ok kezeléséért, amelyek könnyű szálak. Alapelvek:

  • Több rendszer szál (M) van, amelyeken goroutine-ok (G) futnak.
  • Az ütemező a goroutine-okat P (processor) objektumokon keresztül köti össze, amelyek a futásra kész goroutine-okat kezelik.
  • A goroutine-ok sorba kerülnek, és az ütemező választja ki a következőt a futtatáshoz.
  • Ha egy goroutine blokkolódik (pl. bemenet-kimenet), az ütemező másikra vált.

Goroutine létrehozásának és futtatásának példája:

package main

import (
    "fmt"
    "time"
)

func task(id int) {
    fmt.Printf("Feladat %d elindult\n", id)
    time.Sleep(time.Second)
    fmt.Printf("Feladat %d befejeződött\n", id)
}

func main() {
    for i := 1; i <= 3; i++ {
        go task(i) // goroutine indítása
    }
    time.Sleep(2 * time.Second) // várakozás a befejezésre
}

Így a Go ütemező hatékonyan osztja el több goroutine végrehajtását korlátozott számú rendszer szál között, biztosítva a versenyképességet és a párhuzamosságot.