| // 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 runtime |
| |
| import "unsafe" |
| |
| // Breakpoint executes a breakpoint trap. |
| func Breakpoint() |
| |
| // LockOSThread wires the calling goroutine to its current operating system thread. |
| // Until the calling goroutine exits or calls UnlockOSThread, it will always |
| // execute in that thread, and no other goroutine can. |
| func LockOSThread() |
| |
| // UnlockOSThread unwires the calling goroutine from its fixed operating system thread. |
| // If the calling goroutine has not called LockOSThread, UnlockOSThread is a no-op. |
| func UnlockOSThread() |
| |
| // GOMAXPROCS sets the maximum number of CPUs that can be executing |
| // simultaneously and returns the previous setting. If n < 1, it does not |
| // change the current setting. |
| // The number of logical CPUs on the local machine can be queried with NumCPU. |
| // This call will go away when the scheduler improves. |
| func GOMAXPROCS(n int) int { |
| return int(gomaxprocsfunc(int32(n))) |
| } |
| |
| func gomaxprocsfunc(int32) int32 // proc.c |
| |
| // NumCPU returns the number of logical CPUs on the local machine. |
| func NumCPU() int { |
| return int(ncpu) |
| } |
| |
| // NumCgoCall returns the number of cgo calls made by the current process. |
| func NumCgoCall() int64 { |
| var n int64 |
| for mp := (*m)(atomicloadp(unsafe.Pointer(&allm))); mp != nil; mp = mp.alllink { |
| n += int64(mp.ncgocall) |
| } |
| return n |
| } |
| |
| // NumGoroutine returns the number of goroutines that currently exist. |
| func NumGoroutine() int { |
| return int(gcount()) |
| } |
| |
| func gcount() int32 |
| |
| // CPUProfile returns the next chunk of binary CPU profiling stack trace data, |
| // blocking until data is available. If profiling is turned off and all the profile |
| // data accumulated while it was on has been returned, CPUProfile returns nil. |
| // The caller must save the returned data before calling CPUProfile again. |
| // |
| // Most clients should use the runtime/pprof package or |
| // the testing package's -test.cpuprofile flag instead of calling |
| // CPUProfile directly. |
| func CPUProfile() []byte |
| |
| // SetCPUProfileRate sets the CPU profiling rate to hz samples per second. |
| // If hz <= 0, SetCPUProfileRate turns off profiling. |
| // If the profiler is on, the rate cannot be changed without first turning it off. |
| // |
| // Most clients should use the runtime/pprof package or |
| // the testing package's -test.cpuprofile flag instead of calling |
| // SetCPUProfileRate directly. |
| func SetCPUProfileRate(hz int) |