github.com/rita33cool1/iot-system-gateway@v0.0.0-20200911033302-e65bde238cc5/docker-engine/pkg/sysinfo/numcpu_windows.go (about) 1 package sysinfo // import "github.com/docker/docker/pkg/sysinfo" 2 3 import ( 4 "runtime" 5 "unsafe" 6 7 "golang.org/x/sys/windows" 8 ) 9 10 var ( 11 kernel32 = windows.NewLazySystemDLL("kernel32.dll") 12 getCurrentProcess = kernel32.NewProc("GetCurrentProcess") 13 getProcessAffinityMask = kernel32.NewProc("GetProcessAffinityMask") 14 ) 15 16 func numCPU() int { 17 // Gets the affinity mask for a process 18 var mask, sysmask uintptr 19 currentProcess, _, _ := getCurrentProcess.Call() 20 ret, _, _ := getProcessAffinityMask.Call(currentProcess, uintptr(unsafe.Pointer(&mask)), uintptr(unsafe.Pointer(&sysmask))) 21 if ret == 0 { 22 return 0 23 } 24 // For every available thread a bit is set in the mask. 25 ncpu := int(popcnt(uint64(mask))) 26 return ncpu 27 } 28 29 // NumCPU returns the number of CPUs which are currently online 30 func NumCPU() int { 31 if ncpu := numCPU(); ncpu > 0 { 32 return ncpu 33 } 34 return runtime.NumCPU() 35 }