proc: optimize FindGoroutine by checking the cache first (#2118)

This commit is contained in:
Alessandro Arzilli 2020-08-05 18:10:13 +02:00 committed by GitHub
parent 46731820df
commit 7a8316b52f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -388,6 +388,10 @@ func FindGoroutine(dbp *Target, gid int) (*G, error) {
return nil, fmt.Errorf("unknown goroutine %d", gid)
}
if g := dbp.gcache.partialGCache[gid]; g != nil {
return g, nil
}
// Calling GoroutinesInfo could be slow if there are many goroutines
// running, check if a running goroutine has been requested first.
for _, thread := range dbp.ThreadList() {
@ -397,10 +401,6 @@ func FindGoroutine(dbp *Target, gid int) (*G, error) {
}
}
if g := dbp.gcache.partialGCache[gid]; g != nil {
return g, nil
}
const goroutinesInfoLimit = 10
nextg := 0
for nextg >= 0 {