Средство выполнения Golang (для процессора и трассировки) дает нам возможность выбрать время профилирования. Затем он устанавливает скорость профилирования в начале вызова и сбрасывает скорость в конце вызова. Таким образом, это выглядит так:
CPUProfiling() {
StartCPUProfile() // internally calls SetCPUProfileRate(100)
sleep(seconds)
StopCPUProfile () // internally calls SetCPUProfileRate(0)
}
С другой стороны, для мьютекса и профилирования блоков он ожидает от нас установки скорости в начале приложения, а при вызове профилирования он просто собирает информацию и возвращает.
Я сомневаюсь, почему мьютекс и профилирование блоков имеют разное поведение? Здесь также мы могли бы установить скорость в начале вызова и сбросить в конце вызова с некоторым временем ожидания.