Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 确定线程CPU负载的粗略但正确的方法?_Multithreading_Timer_Cpu - Fatal编程技术网

Multithreading 确定线程CPU负载的粗略但正确的方法?

Multithreading 确定线程CPU负载的粗略但正确的方法?,multithreading,timer,cpu,Multithreading,Timer,Cpu,我想知道我的概念是否正确——比如我想了解多线程应用程序中运行的线程的CPU利用率。在感兴趣的线程中有一个无限while循环,它完成了所有需要的处理。我有一个变量跟踪在这个循环中花费的时间 我运行代码并在循环中设置断点。我启动一个外部秒表,并从while循环开始同时运行代码(尽可能多)。我暂停代码,同时停止秒表 现在这个线程的CPU利用率是这个线程花费的时间/经过的总时间 这个概念正确吗?除了这些估计的粗略性质,以及启动代码和同时停止代码和秒表所涉及的人为错误之外 似乎你得到的总是100%。如果只

我想知道我的概念是否正确——比如我想了解多线程应用程序中运行的线程的CPU利用率。在感兴趣的线程中有一个无限while循环,它完成了所有需要的处理。我有一个变量跟踪在这个循环中花费的时间

我运行代码并在循环中设置断点。我启动一个外部秒表,并从while循环开始同时运行代码(尽可能多)。我暂停代码,同时停止秒表

现在这个线程的CPU利用率是这个线程花费的时间/经过的总时间


这个概念正确吗?除了这些估计的粗略性质,以及启动代码和同时停止代码和秒表所涉及的人为错误之外

似乎你得到的总是100%。如果只有在线程上运行,那么这个计算是有意义的。但是如果有其他线程同时运行,那么在您记录的开始时间和结束时间之间,当线程被调度出去时,会有一些时间片等待CPU执行,因此您的计算没有意义。Linux内核使用一个计数器来实现这一点,您可以参考它。如果有多个线程在运行,计算是否更有意义?时间计数器将只测量感兴趣的线程实际运行的时间,并在它被调度出去时停止。实际上,线程本身无法知道它是被调度进来还是被调度出去。只有操作系统才能处理它。