Sobes.tech
Junior — Middle

Előfordulhat-e olyan helyzet, amikor a szálak száma meghaladja a processzor magjainak számát?

sobes.tech MI

Válasz az MI-től

Igen, ilyen helyzet lehetséges. Go (Golang) nyelvben a goroutine-ok száma jelentősen meghaladhatja a fizikai processzornyílások számát. A goroutine-ok könnyű szálak, amelyeket a Go futásideje kezel, és lehetnek ezrek vagy akár milliók, míg a magok száma általában a hardver által korlátozott.

A Go futásideje ütemezi a goroutine-ok végrehajtását az elérhető rendszer szálakon, amelyek viszont a processzor magjai között oszlanak szét. Így a goroutine-ok száma nem korlátozott a magok számával, hanem a rendszer erőforrásaival (memória és CPU idő). Ez lehetővé teszi a multitasking és a párhuzamosság hatékony kihasználását.

Példa:

package main

import (
    "fmt"
    "time"
)

func worker(id int) {
    fmt.Printf("Munkás %d elindult\n", id)
    time.Sleep(time.Second)
    fmt.Printf("Munkás %d befejezte\n", id)
}

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

Itt 1000 goroutine-t hozunk létre, ami sokkal több, mint a magok száma, de a program helyesen működik.