Golang 性能测试,发现多核机器一直不能跑满,单核机器可以跑满,集合https://blog.youkuaiyun.com/liangzhiyang/article/details/52669851?utm_source=blogxgwz3 的调度理论,想看下某个goroutine 一秒内是否会被切走,如果被切走,就说明go在调度时会对每个核“负载均衡”。
linux 环境获取threadID的方法如下:
package main
import (
"fmt"
"golang.org/x/sys/unix"
"time"
)
func see(s string) {
//runtime.LockOSThread()
a := time.Now()
for i := 1; i < 20000; i++ {
//runtime.Gosched()
var sum int
sum = 1
sum = sum * i
fmt.Println("sum:", sum)
fmt.Println("s:", s)
getid("see " + s)
//fmt.Println("cpus:", runtime.StackRecord{})
//fmt.Println("cpus:", runtime.LockOSThread)
}
fmt.Println(time.Since(a))
}
func getid(s string) {
pid := unix.Getpid()
fmt.Println(s+" Getpid", pid)
fmt.Println(s+" Getppid", unix.Getppid())
pgid, _ := unix.Getpgid(pid)
fmt.Println(s+" Getpgid", pgid)
fmt.Println(s+" Gettid", unix.Gettid())
sid, _ := unix.Getsid(pid)
fmt.Println(s+" Getsid", sid)
fmt.Println(s+" Getegid", unix.Getegid())