Files
gocryptotrader/utils/utils.go
Adrian Gallagher 8ca1e5c36f Fix utils.AdjustGoMaxProcs
Since Go 1.5, Go will use the total number of logical processers that the
system has available. Caveats to this are if someone has set the
GOMAXPROCS env var set or wish to limit usage of the number of logical processers
between a range from 1 to NumCPUs
2019-10-03 10:45:59 +10:00

49 lines
1.1 KiB
Go

package utils
import (
"errors"
"path/filepath"
"runtime"
)
const (
defaultTLSDir = "tls"
)
// Util vars
var (
ErrGoMaxProcsFailure = errors.New("failed to set GOMAXPROCS")
)
// AdjustGoMaxProcs sets the runtime GOMAXPROCS val
// Since Go 1.5, Go will use the total number of logical processers that the
// system has available. Caveats to this are if someone has set the GOMAXPROCS
// env var set or wish to limit usage of the number of logical processers
// between a range from 1 to NumCPUs
func AdjustGoMaxProcs(procs int) error {
// Check for default settings, plus respecting GOMAXPROCS env but
// don't allow for values which will cause thread contention
n := runtime.NumCPU()
if procs == runtime.GOMAXPROCS(-1) {
if procs <= n {
return nil
}
}
// Sanitise the procs value (defaults to NumCPUs)
if procs < 1 || procs > n {
procs = n
}
runtime.GOMAXPROCS(procs)
if i := runtime.GOMAXPROCS(procs); i != procs {
return ErrGoMaxProcsFailure
}
return nil
}
// GetTLSDir returns the default TLS dir
func GetTLSDir(dir string) string {
return filepath.Join(dir, defaultTLSDir)
}