我有多线程 C 应用程序(守护进程)。我可以通过应用程序中的线程测量 CPU 使用情况吗?
虽然这是一个老问题,但它是我自己的谷歌搜索中最热门的相关点击。所以我会提供我想到的答案。
假设您正在使用 pthreads 或使用它的库,例如 Boost 库。
您可以使用
pthread_getcpuclockid
和 clock_gettime
。这是一个简单的示例,它将当前时间作为 double 返回。
double cpuNow( void ) {
struct timespec ts;
clockid_t cid;
pthread_getcpuclockid(pthread_self(), &cid);
clock_gettime(cid, &ts);
return ts.tv_sec + (((double)ts.tv_nsec)*0.000000001);
}
您可以从
/proc/<PID>/stat
中解析出数据。 CPU 线如下所示:-
cpu 143359 8217 480152 132054567 45162 5678 24656 0 0