C++ 如何检测线程或进程是否因操作系统调度而耗尽

C++ 如何检测线程或进程是否因操作系统调度而耗尽,c++,linux,operating-system,job-scheduling,ace,C++,Linux,Operating System,Job Scheduling,Ace,这是在Linux操作系统上实现的。APP是用C++编写的ACE库。 我怀疑进程中的一个线程有时会被阻塞异常长的时间(5到40秒)。除了一天中有几次出现此问题外,该应用程序在大多数情况下都运行良好。还有其他类似的5个应用程序运行在该设备上,由于大量套接字传入数据,这些应用程序也受到I/O限制 我想知道我是否可以通过编程来做一些事情,看看线程/进程是否得到了它们的时间片。如果一个进程被耗尽,那么对该进程的自我监控将不会有那么大的效率。但是,如果您只是想让该进程注意到它已经有一段时间没有运行了,那么它

这是在Linux操作系统上实现的。APP是用C++编写的ACE库。 我怀疑进程中的一个线程有时会被阻塞异常长的时间(5到40秒)。除了一天中有几次出现此问题外,该应用程序在大多数情况下都运行良好。还有其他类似的5个应用程序运行在该设备上,由于大量套接字传入数据,这些应用程序也受到I/O限制


我想知道我是否可以通过编程来做一些事情,看看线程/进程是否得到了它们的时间片。

如果一个进程被耗尽,那么对该进程的自我监控将不会有那么大的效率。但是,如果您只是想让该进程注意到它已经有一段时间没有运行了,那么它可以定期调用
times
,并将经过时间的相对差异与计划用户时间的相对差异进行比较(如果要将等待孩子的时间计算为生产时间,可以将
tms_-utime
tms_-utime
字段相加,如果将代表您花费的内核时间计算为生产时间,则可以将
tms_-time
tms_-cstime
字段相加)。对于线程时间,我知道的唯一方法是查阅
/proc
文件系统

高优先级外部进程或高优先级线程可以通过读取进程的相应
/proc//stat
项(以及线程的
/proc//task//stat
项)从外部监视感兴趣的进程(和线程)。用户时间在
stat
文件的第14和第16个字段中找到。系统时间在第15和第17个字段中找到。(字段位置对于我的Linux 2.6内核来说是准确的。)

在两个时间点之间,确定经过的时间量(监视器进程或线程通常会定期唤醒)。然后,每个时间点的累积处理时间之差表示感兴趣线程在此期间运行的时间。处理时间与已用时间之比表示时间片

最后一点信息:在Linux上,我使用以下命令获取当前线程的
tid
,以检查
/proc//task/
目录中的右侧
任务

tid = syscall(__NR_gettid);
我这样做是因为我找不到系统上任何库实际导出的
gettid
系统调用,即使它是有文档记录的。但是,它可能在您的系统上可用