Go Tests Parallelism
The command go test ./...
lists all packages in the current directory, builds tests executable for each package, and runs them. The run part is interesting.
By default, the number of packages executed in parallel is equal to the value of GOMAXPROCS
variable. On my laptop, it is 12 which is the number of CPU cores available.
The other parallelism is inside a package. If a test uses t.Parallel
, go test -parallel <num of tests>
determines the parallelism.
Why is it important to tune the degree of parallelism
Too many tests running in parallel would time out/crash for want of resources or it could expose a bug. There might be a leakage in the socket, buffer, and so on. If your machine is busy and you see tests timing out often, do try to tune the parallelism.
Tip
Always use go test ./...
because it caches tests result for a package. So you save time, CPU in upcoming runs given your changes are not spreading to all packages.
References
- go help test
- go help testflag
- go help build
Credit to StackOverflow
GOMAXPROCS
package main
import (
"runtime"
"fmt"
)
func getGOMAXPROCS() int {
return runtime.GOMAXPROCS(0)
}
func main() {
fmt.Printf("GOMAXPROCS is %d\n", getGOMAXPROCS())
}
Written with StackEdit.
You must be logged in to post a comment.