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.