The documentation für runtime.LockOsThread
Zustände:Warum sperrt Go's LockOSThread diesen Betriebssystem-Thread nicht?
LockOSThread Drähte des anruf goroutine zu seinem aktuellen Betriebssystem-Thread. Bis die aufrufende goroutine ExcludeOSThread beendet oder aufruft, wird sie immer in diesem Thread ausgeführt, und keine andere goroutine kann.
Aber betrachten Sie dieses Programm:
package main
import (
"fmt"
"runtime"
"time"
)
func main() {
runtime.GOMAXPROCS(1)
runtime.LockOSThread()
go fmt.Println("This shouldn't run")
time.Sleep(1 * time.Second)
}
Die main
goroutine zum einem Thread verfügbar OS von GOMAXPROCS
eingestellt verdrahtet ist, so würde ich erwarten, dass die goroutine auf Linie 3 erstellt von main
werden nicht ausgeführt. Stattdessen druckt das Programm This shouldn't run
, pausiert für 1 Sekunde und wird beendet. Warum passiert das?
so die Frage 'Warum GoOS LockOSThread nicht diesen OS-Thread sperren?' Sollte 'warum mehrere goroutines ausgeführt werden, selbst wenn GOMAXPROCS auf 1 gesetzt ist' –