...

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 GOARCH == "wasm" && n > 1 {
    19			n = 1 // WebAssembly has no threads yet, so only one CPU is possible.
    20		}
    21	
    22		lock(&sched.lock)
    23		ret := int(gomaxprocs)
    24		unlock(&sched.lock)
    25		if n <= 0 || n == ret {
    26			return ret
    27		}
    28	
    29		stopTheWorld("GOMAXPROCS")
    30	
    31		// newprocs will be processed by startTheWorld
    32		newprocs = int32(n)
    33	
    34		startTheWorld()
    35		return ret
    36	}
    37	
    38	// NumCPU returns the number of logical CPUs usable by the current process.
    39	//
    40	// The set of available CPUs is checked by querying the operating system
    41	// at process startup. Changes to operating system CPU allocation after
    42	// process startup are not reflected.
    43	func NumCPU() int {
    44		return int(ncpu)
    45	}
    46	
    47	// NumCgoCall returns the number of cgo calls made by the current process.
    48	func NumCgoCall() int64 {
    49		var n int64
    50		for mp := (*m)(atomic.Loadp(unsafe.Pointer(&allm))); mp != nil; mp = mp.alllink {
    51			n += int64(mp.ncgocall)
    52		}
    53		return n
    54	}
    55	
    56	// NumGoroutine returns the number of goroutines that currently exist.
    57	func NumGoroutine() int {
    58		return int(gcount())
    59	}
    60	
    61	//go:linkname debug_modinfo runtime/debug.modinfo
    62	func debug_modinfo() string {
    63		return modinfo
    64	}
    65	

View as plain text