首页 > 其他分享 >多线程开启gprof性能测试的简易方法

多线程开启gprof性能测试的简易方法

时间:2023-06-18 14:01:51浏览次数:38  
标签:foo itimer ITIMER setitimer gprof 简易 PROF 多线程


用到gprof时才知道,原来gprof只能对主线程统计耗时。manual上也没写线程相关的问题啊?

不过有现成的解决方案:http://sam.zoy.org/writings/programming/gprof.html

该方案封装了pthread_create(), 让线程初始化执行一个setitimer(ITIMER_PROF, ...)。

简易的方法是直接在代码中写个setitimer()。

#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()的耗时统计。







标签:foo,itimer,ITIMER,setitimer,gprof,简易,PROF,多线程
From: https://blog.51cto.com/u_16162321/6508359

相关文章

  • 使用命令行进行基于Git的简易代码管理
    继上个vscode图形化使用Git管理之后,发现日常工作有一种pipe不太灵,存在问题:gitclone别人的仓库(下来的最外层目录先叫“工程目录”);在工程目录下,修改代码;gitclone自己远程创建的仓库(eg.gitee);cp-r别人工程目录自己工程目录;自己的工程目录下查看:已发生文件的增添。但这时......
  • 多线程
    多线程线程介绍每个进程都会有一个主线程,在创建进程时创建,往后创建的线程都属于子线程;线程在进程里不断抢占运行时间片;当进程遇到return结束,所有的线程全部结束。线程分类线程主要分为用户级线程和内核级线程用户级线程主要解决上下文切换问题,其调度由用户控制内核级线程......
  • 多线程
    1.进程和线程的定义进程:引用程序的执行实例(一个应用对应一个进程)线程:CPU调用和分派的基本单元,进程中执行运算的最小单位2.创建线程的种类继承java.lang.Thread类实现java.lang.Runnable接口3.继承java.lang.Thread类(1)定义MyThread类继承Thread类(2)重写run()方法,编写线程......
  • web worker进程和线程的区别,Chrome 中有哪些常⻅进程,如果我有⼀个耗时很⻓的同步计算
    进程(Process)和线程(Thread)都是操作系统中用于多任务处理的概念。简单地说,一个进程就是一个程序的执行空间,而一个线程则是在执行空间内独立运行的执行路径。区别:进程是系统分配资源的最小单位,线程是操作系统调度的最小单位。各个进程之间是独立的,各个线程之间共享一些资源。创......
  • c++多线程 std::async std::future
    c++标准库中对线程操作有完善的封装,其中最常用到的如std::thread,std::async。EffectiveModernCpp中指出,应尽量使用std::async即基于任务的编程而非基于线程的编程。std::thread在前面的文章有提到过,此处仅对std::async作以记录。正如前面所说,std::async是基于任务的策略,本人理......
  • Java 多线程同步问题的探究(三、Lock来了,大家都让开【1. 认识重入锁】)
    在上一节中,我们已经了解了Java多线程编程中常用的关键字synchronized,以及与之相关的对象锁机制。这一节中,让我们一起来认识JDK5中新引入的并发框架中的锁机制。我想很多购买了《Java程序员面试宝典》之类图书的朋友一定对下面这个面试题感到非常熟悉:问:请对比synchronized......
  • 多线程
    概念程序:一段静态的代码进程:运行中的程序进程作为资源分配的单位线程:进程进一步细化为线程,是一个程序内部的一条执行路径实现方式继承thread创建一个继承Thread的子类子类中重写父类的run()方法创建子类的对象通过子类对象.start()启动线程实现runable接口创建......
  • 利用jQuery制作简易的table上下无缝轮播
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=......
  • Java 多线程同步问题的探究(二、给我一把锁,我能创造一个规矩)
    在上一篇中,我们讲到了多线程是如何处理共享资源的,以及保证他们对资源进行互斥访问所依赖的重要机制:对象锁。本篇中,我们来看一看传统的同步实现方式以及这背后的原理。很多人都知道,在Java多线程编程中,有一个重要的关键字,synchronized。但是很多人看到这个东西会感到困惑:“都说同......
  • Python教程-多线程与多进程
    什么是线程,什么是进程?进程是程序(软件,应用)的一个执行实例,每个运行中的程序,可以同时创建多个进程,但至少要有一个。每个进程都提供执行程序所需的所有资源,都有一个虚拟的地址空间、可执行的代码、操作系统的接口、安全的上下文(记录启动该进程的用户和权限等等)、唯一的进程ID、环境变......