При попытке обнаружить узкое место параллелизма я использую /debug/pprof/mutex
и /debug/pprof/block
и выводю данные в svg.Обе диаграммы показывают одинаково, DAG со временем по краям, но они показывают совершенно другой график вызовов.Например, я использую пул соединений, функции, связанные с этим соединением, полностью ушли из профилирования блоков, но они являются основным временным вкладом в профилирование мьютекса.
Вот мое понимание:
время на грани профилирования мьютексов - это время, когда goroutines удерживают мьютексы.Время на грани профилирования блоков - это время, когда блокируются подпрограммы.
Так что, если я хочу оптимизировать свою программу для лучшего параллелизма, я должен проверить путь, показанный в «Профилировании блоков», верно?