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 5package runtime 6 7import ( 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. 17func 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. 43func NumCPU() int { 44 return int(ncpu) 45} 46 47// NumCgoCall returns the number of cgo calls made by the current process. 48func 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. 57func NumGoroutine() int { 58 waitForSystemGoroutines() 59 return int(gcount()) 60} 61 62// Get field tracking information. Only fields with a tag go:"track" 63// are tracked. This function will add every such field that is 64// referenced to the map. The keys in the map will be 65// PkgPath.Name.FieldName. The value will be true for each field 66// added. 67func Fieldtrack(map[string]bool) 68 69//go:linkname debug_modinfo runtime..z2fdebug.modinfo 70func debug_modinfo() string { 71 return modinfo 72} 73 74// setmodinfo is visible to code generated by cmd/go/internal/modload.ModInfoProg. 75//go:linkname setmodinfo runtime.setmodinfo 76func setmodinfo(s string) { 77 modinfo = s 78} 79