Sobes.tech
Junior — Middle

Lze přiřadit spuštění gorutiny ke konkrétnímu systémovému vláknu?

sobes.tech AI

Odpověď od AI

V jazyce Go (Golang) nejsou gorutiny vázány na konkrétní systémové vlákna. Plánovač Go sám rozděluje gorutiny mezi vlákna OS pro efektivní využití zdrojů.

Pokud je však potřeba spustit kód v kontextu konkrétního vlákna (například pro interakci s knihovnou v C, která vyžaduje volání z jednoho vlákna), lze použít funkci runtime.LockOSThread(). Tato funkce připojí aktuální gorutinu k systémovému vláknu až do volání runtime.UnlockOSThread().

Příklad:

import (
    "runtime"
)

func main() {
    runtime.LockOSThread()
    defer runtime.UnlockOSThread()
    // kód, který má být vykonáván v jednom systémovém vlákně
}

V běžné praxi není nutné ani vhodné gorutinu vázat na vlákno, protože to snižuje efektivitu plánovače.