...
Run Format

Source file src/runtime/debug.go

     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	}
    59	

View as plain text