Multithreading 确定线程CPU负载的粗略但正确的方法?
我想知道我的概念是否正确——比如我想了解多线程应用程序中运行的线程的CPU利用率。在感兴趣的线程中有一个无限while循环,它完成了所有需要的处理。我有一个变量跟踪在这个循环中花费的时间 我运行代码并在循环中设置断点。我启动一个外部秒表,并从while循环开始同时运行代码(尽可能多)。我暂停代码,同时停止秒表 现在这个线程的CPU利用率是这个线程花费的时间/经过的总时间Multithreading 确定线程CPU负载的粗略但正确的方法?,multithreading,timer,cpu,Multithreading,Timer,Cpu,我想知道我的概念是否正确——比如我想了解多线程应用程序中运行的线程的CPU利用率。在感兴趣的线程中有一个无限while循环,它完成了所有需要的处理。我有一个变量跟踪在这个循环中花费的时间 我运行代码并在循环中设置断点。我启动一个外部秒表,并从while循环开始同时运行代码(尽可能多)。我暂停代码,同时停止秒表 现在这个线程的CPU利用率是这个线程花费的时间/经过的总时间 这个概念正确吗?除了这些估计的粗略性质,以及启动代码和同时停止代码和秒表所涉及的人为错误之外 似乎你得到的总是100%。如果只
这个概念正确吗?除了这些估计的粗略性质,以及启动代码和同时停止代码和秒表所涉及的人为错误之外 似乎你得到的总是100%。如果只有在线程上运行,那么这个计算是有意义的。但是如果有其他线程同时运行,那么在您记录的开始时间和结束时间之间,当线程被调度出去时,会有一些时间片等待CPU执行,因此您的计算没有意义。Linux内核使用一个计数器来实现这一点,您可以参考它。如果有多个线程在运行,计算是否更有意义?时间计数器将只测量感兴趣的线程实际运行的时间,并在它被调度出去时停止。实际上,线程本身无法知道它是被调度进来还是被调度出去。只有操作系统才能处理它。