mrd*_*abd 2 c# multithreading cpu-usage
我有一组消耗CPU的执行,每个执行都在低优先级的线程中运行。这些线程将在进程(如IIS)中运行,该进程具有许多其他不想让它们变慢的线程。我想计算所有其他线程的cpu使用率,如果它的使用率大于50%,则我暂停一个线程,如果它的使用率小于50%,我将恢复暂停的执行。
在暂停时,我将执行状态保存在db中并终止其线程,并在恢复时启动新线程。
我需要的是一个返回线程的cpu使用率的函数。
private static void monitorRuns(object state)
{
Process p = Process.GetCurrentProcess;
double usage = 0;
foreach(ProcessThread t in p.Threads)
{
if(!myThreadIds.Contains(t.Id)) // I have saved my own Thread Ids
{
usage += getUsingPercentage(t); // I need a method like getUsingPercentage
}
}
if(usage > 50){
pauseFirst(); // saves the state of first executions and terminates its threads
}else{
resumeFirst(); // start new thread that executes running using a state
}
}
Run Code Online (Sandbox Code Playgroud)
此函数通过计时器调用:
Timer t = new Timer(monitorRuns,null,new TimeSpan(0,0,10),new TimeSpan(0,5,0));
Run Code Online (Sandbox Code Playgroud)
要计算进程/线程的CPU使用率,您应该获取系统/进程/线程特定时间范围内的处理器时间。然后,您可以计算CPU使用率,并且不要忘记将该值除以CPU内核数。
ProcessWideThreadCpuUsage = (ThreadTimeDelta / CpuTimeDelta)
SystemWideThreadCpuUsage = (ThreadTimeDate / CpuTimeDelta) * ProcessCpuUsage
Run Code Online (Sandbox Code Playgroud)
我发现该示例说明了该方法。您可以阅读它作为参考。
| 归档时间: |
|
| 查看次数: |
3416 次 |
| 最近记录: |