The documentation per runtime.LockOsThread
stati:Perché LockOShread di Go not non blocca questo thread del sistema operativo?
fili LockOSThread il goroutine chiamando all'attuale thread di sistema operativo. Finché la goroutine di chiamata non si chiude o chiama Unlockosthread, verrà sempre eseguita in quel thread e nessun'altra goroutine può.
Ma considera questo programma:
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)
}
Il main
goroutine è collegato a quello disponibile filo OS fissato dal GOMAXPROCS
, quindi mi aspetterei che il goroutine creato sulla linea 3 della main
non verrà eseguito. Ma invece il programma stampa This shouldn't run
, si ferma per 1 secondo e si chiude. Perché succede?
quindi la domanda 'Perché non va LockOSThread bloccare questo thread del sistema operativo?' Dovrebbe essere "perché più goroutine vengono eseguite anche se GOMAXPROCS è impostato su 1' –