Что на самом деле означают счетчики производительности "CLR LocksAndThreads"? - PullRequest
6 голосов
/ 14 февраля 2011

Я читал о счетчиках блокировки и производительности потоков , но до сих пор не понимаю, что на самом деле значат некоторые из них.Я говорю конкретно о Длина очереди и Уровень конкуренции счетчиков и их посекундных аналогов.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);
    }
}

Что будут показывать счетчики при запуске?

1 Ответ

5 голосов
/ 17 февраля 2011

Счетчик «длина очереди» предназначен для числа потоков, которые ожидают получения блокировки в данный момент; в то время как «уровень конкуренции» - это число потоков, которые должны были когда-то ждать в прошлом.

Соответственно, «длина очереди / сек» - это изменение очереди в секунду - сколько потоков стало , ожидающих в течение последней секунды; а «скорость конфликта / сек» - это количество потоков, ожидающих хотя бы некоторое время в течение последней секунды.

Это объясняет, как длина очереди может быть равна 0 при высоком уровне конкуренции: многие потоки ждут немного времени. И наоборот, 0 для общего числа конфликтов, но длинной очереди: те же потоки ожидают очень долго.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...