Как дескриптор относится к потоку? - PullRequest
0 голосов
/ 02 декабря 2009

Как именно дескриптор относится к потоку? Я пишу сервис, который принимает HTTP-запрос и вызывает метод перед возвратом ответа. Я написал тестовый клиент, который отправляет 10 000 HTTP-запросов (используя семафор, чтобы убедиться, что за раз выполняется только 1000 запросов).

Если я вызову метод (метод, обработанный перед возвратом ответа) через ThreadPool или через универсальное действие <T> .BeginInvoke, дескрипторы службы будут идти вверх и оставаться там до тех пор, пока весь запрос не будет завершен, но количество потоков службы остается практически мертвым.

Однако, если я синхронно вызываю метод перед возвратом ответа, счетчик потоков увеличивается, но счетчик дескрипторов будет проходить через экстремальные пики и впадины.

Это C # на машине с Windows (Server 2008)

Ответы [ 2 ]

1 голос
/ 03 декабря 2009

Ваше описание слишком расплывчато, чтобы дать хорошую диагностику. Но ThreadPool был разработан, чтобы тщательно регулировать количество активных потоков. Это позволит избежать запуска большего количества потоков, чем у вас процессорных ядер. Только когда поток застрянет, он запланирует дополнительный поток. Это объясняет, почему вы видите, что количество потоков не сильно увеличивается. И, косвенно, почему количество дескрипторов остается стабильным, потому что машина выполняет меньше работы.

0 голосов
/ 02 декабря 2009

Вы можете рассматривать дескриптор как абстракцию указателя. В Windows есть много вещей, которые используют дескрипторы (когда вы открываете файл на уровне API, вы получаете дескриптор файла, когда вы создаете окно, у окна есть дескриптор, у потока есть дескриптор и т. Д.). Итак, ваш счетчик дескрипторов, вероятно, связан с операциями, которые происходят в ваших потоках. Если у вас запущено больше потоков, одновременно происходит больше вещей, так что вы увидите больше открытых ручек.

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