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.