私のマルチスレッド アプリケーション (c++) は pthreads を使用しています。アプリケーションは自動的にスレッドを生成し、オンデマンドで再利用し、スレッドが長時間アイドル状態になったときにスレッドをキャンセルできるようにします。
さまざまなシナリオにさらされたときに、アプリケーションのパフォーマンスを確認するための統計データをキャプチャする「特別なスレッド」を入れました。
CPUの使用量を知るために、プロセスが終了するのが待ちきれません。
特別なスレッドからこれを使用しようとしましたが、結果は ps & top の出力と一致しないようでした:
struct rusage ru;
double utime, stime, ttime ;
if (getrusage(RUSAGE_SELF, &ru) == -1)
return;
utime = ru.ru_utime.tv_sec + ( ru.ru_utime.tv_usec / 1000000 ); // Total CPU time used in user space
stime = ru.ru_stime.tv_sec + ( ru.ru_stime.tv_usec / 1000000 ); // Total CPU time used in kernel space
ttime = utime + stime; // Total CPU Utilization
良いハック、それを行うためのより良い方法があるかどうか、または上記が正しい方法であるかどうか教えてください。実際には何か他のものが欠けていますか?
前もって感謝します。