Я оптимизирую производительность программы Go.Глядя на профилирование мьютекса, я получил
> go tool pprof -seconds 30 -ignore .*Shopify.* http://HOST/debug/pprof/mutex
(pprof) top 20
Active filters:
ignore=.*Shopify.*
Showing nodes accounting for 3.08mins, 91.03% of 3.39mins total
Dropped 82 nodes (cum <= 0.02mins)
flat flat% sum% cum cum%
3.08mins 91.03% 91.03% 3.08mins 91.03% sync.(*Mutex).Unlock
0 0% 91.03% 0.06mins 1.75% ....func2
0 0% 91.03% 0.06mins 1.75% ....func3
Фрагмент кода
. . 502: w.mu.Lock()
. . ... some calculation
. 5.02mins 510: w.mu.Unlock()
. . 511:
. . 512: return nil
. . 513:}
Что я не понимаю:
- Почему профилирование мьютекса показываеттолько топ 1 имеет
flat
время, все остальные 0
? - Если он показывает ожидание на
Lock
, то это, вероятно, означает, что расчет занимает слишком много времени, но что это значит, когда он показывает ожидание наUnlock
?