有没有办法衡量macos下线程的执行时间?我知道有getrusage
函数,但它应该只测量进程时间(在linux下有扩展来测量线程时间,但不幸的是我在MacOs下工作)。我需要测量线程的时间(用户空间和内核空间中处理时间的总和)。确切的类似物是Windows
下的GetThreadTimes
(https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-getthreadtimes)
可以将RUSAGE_THREAD
作为第一个参数传递给getrusage
。
编辑:看起来Mac只支持RUSAGE_SELF
和RUSAGE_CHILDREN
。
CLOCK_THREAD_CPUTIME_ID
是另一个选项,它跟踪调用线程的CPU时间。请注意,这是CPU时间,而不是时钟时间,例如,任何睡眠时间都不会被计算在内。
#include <stdio.h>
#include <pthread.h>
#include <time.h>
void* thread_func(void* args)
{
struct timespec tp;
ret = clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp);
printf("thread elapsed secs: %ld nsecs %ldn", tp.tv_sec, tp.tv_nsec);
}
int main()
{
pthread_t thread;
pthread_create(&thread, NULL, thread_func, NULL);
pthread_join(thread, NULL);
}