Source File
debug.go
Belonging Package
runtime
// Copyright 2009 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package runtimeimport ()// GOMAXPROCS sets the maximum number of CPUs that can be executing// simultaneously and returns the previous setting. It defaults to// the value of runtime.NumCPU. If n < 1, it does not change the current setting.// This call will go away when the scheduler improves.func ( int) int {if GOARCH == "wasm" && > 1 {= 1 // WebAssembly has no threads yet, so only one CPU is possible.}lock(&sched.lock):= int(gomaxprocs)unlock(&sched.lock)if <= 0 || == {return}stopTheWorldGC(stwGOMAXPROCS)// newprocs will be processed by startTheWorldnewprocs = int32()startTheWorldGC()return}// NumCPU returns the number of logical CPUs usable by the current process.//// The set of available CPUs is checked by querying the operating system// at process startup. Changes to operating system CPU allocation after// process startup are not reflected.func () int {return int(ncpu)}// NumCgoCall returns the number of cgo calls made by the current process.func () int64 {var = int64(atomic.Load64(&ncgocall))for := (*m)(atomic.Loadp(unsafe.Pointer(&allm))); != nil; = .alllink {+= int64(.ncgocall)}return}// NumGoroutine returns the number of goroutines that currently exist.func () int {return int(gcount())}//go:linkname debug_modinfo runtime/debug.modinfofunc () string {return modinfo}// mayMoreStackPreempt is a maymorestack hook that forces a preemption// at every possible cooperative preemption point.//// This is valuable to apply to the runtime, which can be sensitive to// preemption points. To apply this to all preemption points in the// runtime and runtime-like code, use the following in bash or zsh://// X=(-{gc,asm}flags={runtime/...,reflect,sync}=-d=maymorestack=runtime.mayMoreStackPreempt) GOFLAGS=${X[@]}//// This must be deeply nosplit because it is called from a function// prologue before the stack is set up and because the compiler will// call it from any splittable prologue (leading to infinite// recursion).//// Ideally it should also use very little stack because the linker// doesn't currently account for this in nosplit stack depth checking.//// Ensure mayMoreStackPreempt can be called for all ABIs.////go:nosplit//go:linkname mayMoreStackPreemptfunc () {// Don't do anything on the g0 or gsignal stack.:= getg()if == .m.g0 || == .m.gsignal {return}// Force a preemption, unless the stack is already poisoned.if .stackguard0 < stackPoisonMin {.stackguard0 = stackPreempt}}// mayMoreStackMove is a maymorestack hook that forces stack movement// at every possible point.//// See mayMoreStackPreempt.////go:nosplit//go:linkname mayMoreStackMovefunc () {// Don't do anything on the g0 or gsignal stack.:= getg()if == .m.g0 || == .m.gsignal {return}// Force stack movement, unless the stack is already poisoned.if .stackguard0 < stackPoisonMin {.stackguard0 = stackForceMove}}
![]() |
The pages are generated with Golds v0.6.7. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |