CLR: Как поколение 0 используется всеми потоками? - PullRequest
7 голосов
/ 20 января 2011

Я не могу представить, что существует единственная блокировка, которую должны получить все потоки, чтобы выделить память. Так есть ли несколько куч Gen 0? Есть ли один, который разделен между потоками?

1 Ответ

7 голосов
/ 20 января 2011

Из этой статьи: Сборка мусора. Часть 2. Автоматическое управление памятью в Microsoft .NET Framework . Автор Jeffrey Richter

Распределения без синхронизации В многопроцессорной системе поколение 0 управляемой кучи разделено на несколько областей памяти с использованием одной области на поток. Это позволяет нескольким потокам выполнять выделение одновременно, поэтому исключительный доступ к куче не требуется.

Масштабируемые коллекции В многопроцессорной системе с серверной версией исполнительного механизма (MSCorSvr.dll) управляемая куча разделена на несколько разделов, по одному на процессор. Когда коллекция инициируется, сборщик имеет один поток на процессор; все потоки собирают свои собственные разделы одновременно. Версия механизма исполнения рабочей станции (MSCorWks.dll) не поддерживает эту функцию.

Существует много других вещей, ищите заголовок «Производительность для многопоточных приложений».

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