是否有适用于 Linux 和 Darwin 的低级系统 API,以获取调度程序的“快照”,查看哪些线程在给定时间运行(活动)、抢占、等待资源或类似情况?
例如,Ubuntu“系统监视器”有一个进程的“等待通道”列,有没有办法为进程内的所有线程获得类似的输出?
我有一个多线程排队系统,其中作业被分派给线程,并有一个可视时间线显示作业何时开始/完成。为了优化它,我想添加一些视觉指示,说明作业何时实际运行(例如在一个处理器内核上),以及它们何时被抢占。
是否有适用于 Linux 和 Darwin 的低级系统 API,以获取调度程序的“快照”,查看哪些线程在给定时间运行(活动)、抢占、等待资源或类似情况?
例如,Ubuntu“系统监视器”有一个进程的“等待通道”列,有没有办法为进程内的所有线程获得类似的输出?
我有一个多线程排队系统,其中作业被分派给线程,并有一个可视时间线显示作业何时开始/完成。为了优化它,我想添加一些视觉指示,说明作业何时实际运行(例如在一个处理器内核上),以及它们何时被抢占。
top -H
显示线程及其状态。在其源代码中跟随 -H 开关将是找出答案的一种方法。快速浏览一下,其中的功能int cmd_threads(globalstate *gstate)
似乎commands.c
可以切换设置。
更新:Procfs 将该信息提供给用户空间。/proc/<pid>/task/<thread-id>/status
给出你所需要的。这也是top
用的。这是我系统的示例输出:
$ cat /proc/418/task/448/status | grep State
State: S (sleeping)
该目录下还有很多有用的细节。