Sobes.tech
Junior — Middle

Czy można przypisać wykonanie goroutine do konkretnego wątku systemowego?

sobes.tech AI

Odpowiedź od AI

W Go (Golang) goroutines nie są przypisane do konkretnych wątków systemowych. Harmonogram Go samodzielnie rozdziela goroutines na wątki OS, aby efektywnie wykorzystywać zasoby.

Jednakże, jeśli konieczne jest wykonanie kodu w kontekście konkretnego wątku (np. do interakcji z biblioteką C, która wymaga wywołań z jednego wątku), można użyć funkcji runtime.LockOSThread(). Utrzymuje ona bieżącą goroutine przypiętą do wątku systemowego aż do wywołania runtime.UnlockOSThread().

Przykład:

import (
    "runtime"
)

func main() {
    runtime.LockOSThread()
    defer runtime.UnlockOSThread()
    // kod, który ma być wykonywany w jednym wątku systemowym
}

Jednak w codziennej praktyce nie jest konieczne ani zalecane przypinanie goroutine do wątku, ponieważ obniża to wydajność planisty.