Nev*_*ind 6 .net multithreading performancecounter
我读到了锁和线程性能计数器,但我仍然不明白它们中的一些实际意味着什么.我特别谈论队列长度和争用率计数器,以及它们的每秒对应数.MSDN表示首先显示等待锁定的线程数,第二个显示获取锁定"未成功"的线程数.我以为如果一个线程正在等待一个锁,这意味着没有获得锁,但显然我错了?
假设我有这个示例程序:
static void Main(string[] args)
{
var t1 = new Thread(RunThread1);
var t2 = new Thread(RunThread2);
t1.Start();
t2.Start();
t1.Join();
t2.Join();
}
static void RunThread1()
{
Thread.Sleep(1000);
// this lock is acquired immediately. What will counters show at this moment?
// probably both will be zero?
lock (m_Lock)
{
Thread.Sleep(10000);
}
}
static void RunThread2()
{
Thread.Sleep(2000);
// this lock has to wait for about 9 seconds. What will counters show?
lock (m_Lock)
{
Thread.Sleep(10000);
}
}
Run Code Online (Sandbox Code Playgroud)
计数器在运行时会显示什么?
"队列长度"计数器用于此时等待获取锁的线程数; 而"争用率"是过去某个时候必须等待的线程数.
因此,"队列长度/秒"是每秒队列的变化 - 在最后一秒期间有多少线程在等待; "争用率/秒"是指在最后一秒内至少等待一段时间的线程数.
这解释了当争用率很高时队列长度如何为0:许多线程等待一段时间.反之亦然,0表示争用的总数,但是队列很长:相同的线程等待很长时间.
| 归档时间: |
|
| 查看次数: |
4288 次 |
| 最近记录: |