multithreading - Why doesn't Go's LockOSThread lock this OS thread? -
the documentation runtime.lockosthread
states:
lockosthread wires calling goroutine current operating system thread. until calling goroutine exits or calls unlockosthread, execute in thread, , no other goroutine can.
but consider program:
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) }
the main
goroutine wired 1 available os thread set gomaxprocs
, expect goroutine created on line 3 of main
not run. instead program prints this shouldn't run
, pauses 1 second, , quits. why happen?
from runtime
package documentation:
the gomaxprocs variable limits number of operating system threads can execute user-level go code simultaneously. there no limit number of threads can blocked in system calls on behalf of go code; not count against gomaxprocs limit.
the sleeping thread doesn't count towards gomaxprocs
value of 1, go free have thread run fmt.println
goroutine.
Comments
Post a Comment