多線程開啟gprof性能測試的簡易方法
(金慶的專欄)
用到gprof時才知道,原來gprof只能對主線程統計耗時。manual上也沒寫線程相關的問題啊?
不過有現成的解決方案:http://sam.zoy.org/writings/programming/gprof.html
該方案封裝了pthread_create(), 讓線程初始化執行一個setitimer(ITIMER_PROF, ...)。
簡易的方法是直接在代碼中寫個setitimer()。
[cpp] view plaincopy
- #include <sys/time.h>
- #include <boost/thread.hpp>
- struct itimerval g_itimer;
- void foo()
- {
- setitimer(ITIMER_PROF, &g_itimer, NULL);
- for (int i = 0; i < 10000000; i++)
- (void)i;
- }
- int main()
- {
- getitimer(ITIMER_PROF, &g_itimer);
- boost::thread t(&foo);
- t.join();
- return 0;
- }
g++ main.cpp -pg -lboost_thread
./a.out
gprof
這樣就能統計出foo()的耗時了。沒有setitimer()就不會有foo()的耗時統計。