Сборщик мусора .NET - каков его приоритет потока? - PullRequest
5 голосов
/ 06 мая 2009

Я нашел несколько замечательных статей ( Маони , Рихтер # 1 , Рихтер # 2 ), дающих много подробностей относительно теории и практики GC , но я не могу найти ничего, что бы указывало, как установлен приоритет потока GC.

Самым близким, что я нашел, является тот, который утверждает, что поток Финализатора "работает асинхронно с приложением и с высоким приоритетом."

Я всегда думал, что это поток с «низким приоритетом», но читать все больше и больше об этом, кажется, неправильно (поскольку GC должен блокировать все остальные ваши потоки, и вы не хотите, чтобы ваш приложение зависит от потока с низким приоритетом для своевременного возобновления).

Кто-нибудь наверняка знает, каким должен быть фактический приоритет?

Ответы [ 5 ]

9 голосов
/ 06 мая 2009

В CLR через C # Рихтер объясняет, что:

Специальный высокоприоритетный поток CLR предназначен для вызова Finalize методов

(см. Заголовок «Внутренние элементы завершения» главы 20)

Это единственный контекст, в котором он говорит о потоке сборщика мусора. Чуть ранее в этой главе он объясняет, что сборка мусора запускается в ответ на одно из следующих событий:

  • Поколение 0 заполнено
  • Позвоните на GC.Collect
  • Windows сообщает о нехватке памяти
  • CLR выгружает домен приложений
  • CLR выключается

... что говорит о том, что единственным потоком, созданным сборщиком мусора, является этот единственный, высокоприоритетный поток финализатора.

Редактировать: Затем он продолжает в "Параллельной коллекции", чтобы объяснить, что:

В многопроцессорной системе, в которой работает исполняющая версия рабочей станции, сборщик мусора имеет дополнительный фоновый поток для одновременного сбора объектов во время работы приложения. [...] У сборщика мусора есть фоновый поток с обычным приоритетом, который помечает недоступные объекты.

5 голосов
/ 06 мая 2009

Поток GC работает с обычным приоритетом. Поток финализатора работает с наивысшим приоритетом.

Это можно увидеть, включив окно «Поток» отладки и взломав в любом месте управляемого приложения. Потоки все перечислены (хотя они не названы), с их приоритетами. Требуется немного, чтобы расшифровать, какой именно, но будет дополнительный поток с «нормальным» и «самым высоким» приоритетом, который соответствует ГХ и потоку финализатора.

1 голос
/ 12 сентября 2012

Поток, на котором работает GC, зависит от того, какую версию GC использует ваше приложение.

Ответ на этот вопрос содержится в сообщении в блоге, которое я написал: Как определить, какой сборщик мусора работает

0 голосов
/ 04 июня 2009

Приоритет потока GC - это деталь реализации, сейчас они работают с обычным приоритетом, однако поток финализатора работает с высоким приоритетом и также имеет время ожидания.

0 голосов
/ 28 мая 2009

сборщик мусора работает с более низким приоритетом, чем критические потоки

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