github.com/panjjo/go@v0.0.0-20161104043856-d62b31386338/src/runtime/debug.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package runtime 6 7 import ( 8 "runtime/internal/atomic" 9 "unsafe" 10 ) 11 12 // GOMAXPROCS sets the maximum number of CPUs that can be executing 13 // simultaneously and returns the previous setting. If n < 1, it does not 14 // change the current setting. 15 // The number of logical CPUs on the local machine can be queried with NumCPU. 16 // This call will go away when the scheduler improves. 17 func GOMAXPROCS(n int) int { 18 if n > _MaxGomaxprocs { 19 n = _MaxGomaxprocs 20 } 21 lock(&sched.lock) 22 ret := int(gomaxprocs) 23 unlock(&sched.lock) 24 if n <= 0 || n == ret { 25 return ret 26 } 27 28 stopTheWorld("GOMAXPROCS") 29 30 // newprocs will be processed by startTheWorld 31 newprocs = int32(n) 32 33 startTheWorld() 34 return ret 35 } 36 37 // NumCPU returns the number of logical CPUs usable by the current process. 38 // 39 // The set of available CPUs is checked by querying the operating system 40 // at process startup. Changes to operating system CPU allocation after 41 // process startup are not reflected. 42 func NumCPU() int { 43 return int(ncpu) 44 } 45 46 // NumCgoCall returns the number of cgo calls made by the current process. 47 func NumCgoCall() int64 { 48 var n int64 49 for mp := (*m)(atomic.Loadp(unsafe.Pointer(&allm))); mp != nil; mp = mp.alllink { 50 n += int64(mp.ncgocall) 51 } 52 return n 53 } 54 55 // NumGoroutine returns the number of goroutines that currently exist. 56 func NumGoroutine() int { 57 return int(gcount()) 58 }