Я пытаюсь получить общее время, потраченное определенной темой на данный момент программно.
getrusage
возвращает процессорное время потока, но я хочу Всего время, включая время, потраченное потоком по какой-либо причине.
Обратите внимание, что я буду использовать эту функциональность, оснащая данную программу профилировщиком, который я написал.
В программе может быть много потоков (я сосредоточен на профилировании серверов, поэтому их может быть много). В любой момент времени я хотел бы знать, сколько времени потратил определенный поток (пока). Так что не удобно запускать таймер для каждого потока, так как он порождается. Так что я хотел бы что-то похожее на использование getrusage
например он возвращает общее время текущего потока или, может быть, я могу передать ему идентификатор потока. Таким образом, ручные механизмы, такие как получение метки времени, когда поток был порожден, а одна позже, после определения их разницы, не будут для меня очень полезными.
Кто-нибудь может подсказать, как это сделать?
Спасибо!
Сохраните текущее время в момент запуска потока. Общее время, потраченное потоком, считая как рабочее, так и заблокированное время, равно:
current_time - start_time
Конечно, это почти всегда бесполезно / бессмысленно, поэтому для него нет специального API.
В зависимости от того, для чего вы хотите это использовать, есть одна возможность подумать о суммировании количества тактов, использованных во время блокировки, которые обычно достаточно медленны, чтобы скрыть небольшие накладные расходы, как это. Таким образом, из этой суммы и интервала окружающего потока, который вы также измеряете, вы можете вычислить нагрузку на поток в реальном времени за этот интервал. Конечно, временное разделение с другими процессами может привести к некоторому снижению, и захват всех блокировок может быть очень простым или очень сложным, в зависимости от вашей ситуации.