Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
C 通过内核跟踪线程执行_C_Multithreading_Multicore - Fatal编程技术网

C 通过内核跟踪线程执行

C 通过内核跟踪线程执行,c,multithreading,multicore,C,Multithreading,Multicore,假设我想画一个x轴上CPU“点击”(或挂钟时间)和y轴上线程执行的图形。例如,如果我有4个内核,我有4个y轴记号,x轴是时间,我想在内核执行线程时用红色绘制:我如何以编程方式收集信息?我想完全理解这个问题,所以我真的不需要使用TBB或任何IDE、Intel或其他的线程可视化。。。我只想理解一段简单的代码来实现这一点。语言不是一个问题,真的,但如果它是C,那就更好了。我不需要“绘制”图形,我只需要知道什么CPU正在执行什么线程以及执行多长时间。谢谢 编辑:我刚刚发现,如果有什么问题,我会看到他们在

假设我想画一个x轴上CPU“点击”(或挂钟时间)和y轴上线程执行的图形。例如,如果我有4个内核,我有4个y轴记号,x轴是时间,我想在内核执行线程时用红色绘制:我如何以编程方式收集信息?我想完全理解这个问题,所以我真的不需要使用TBB或任何IDE、Intel或其他的线程可视化。。。我只想理解一段简单的代码来实现这一点。语言不是一个问题,真的,但如果它是C,那就更好了。我不需要“绘制”图形,我只需要知道什么CPU正在执行什么线程以及执行多长时间。谢谢


编辑:我刚刚发现,如果有什么问题,我会看到他们在做什么,并根据我的需要进行调整。

在不涉及内核的情况下这样做将很困难

绘制图形的最佳方法是让内核在调度进程时记录更改(它不必做很多更改,因为大多数操作系统都具有软关联,并且更喜欢在同一个内核上保留线程)

也就是说,一些操作系统将此类统计数据导出到用户空间。例如,Linux有
/proc/[pid]/stat
,有一个名为
处理器的字段


要了解(模糊的)线程在任何给定时刻发生的情况,您可以监视
/proc/self/task/*/stat

中的文件。是否已经有无数程序可以这样做?我认为这样做不行。OP可能需要使用perf或kernelshark之类的东西。