Здесь Microsoft использует имена «одновременный» и «фоновый» для описания двух версий GC, которые она использует в .NET. В мире .NET «фоновый сборщик» является улучшением по сравнению с «одновременным сборщиком» в том смысле, что он имеет меньше ограничений на то, что потоки приложения могут делать во время работы сборщика.
Базовый GC использует стратегию "останови мир": аппликативные потоки выделяют блоки памяти из общей кучи. Когда GC должен работать (например, слишком много блоков выделено, требуется некоторая очистка), все аппликативные (управляемые) потоки останавливаются. Последний завершающий поток запускает GC и разблокирует все остальные потоки после его завершения. ГХ "стоп-мир" прост в реализации, но вызывает паузы, которые могут быть заметны на уровне пользователя.
«Параллельный сборщик мусора» от Microsoft является поколением: он использует стратегию «остановить мир» только для ограниченной части кучи (то, что они называют «поколения 0 и 1»). Поскольку эта часть остается небольшой, паузы остаются короткими (например, ниже 50 мс), так что пользователь их не заметит. Остальная часть кучи собирается с выделенным потоком GC, который может запускать одновременно с аппликативными потоками (отсюда и название).
Параллельный сборщик мусора имеет некоторые ограничения. А именно, бывают моменты, когда поток GC должен взять на себя несколько исключительный контроль над кучей. В течение этого времени аппликативные потоки могут выделять блоки только из небольших областей, специфичных для потока. Потоки с большими потребностями скоро наткнуться на основную кучу, которая в это время блокируется потоком GC. Распределяющий поток должен затем блокироваться, пока поток GC не завершит свою фазу блокировки кучи. Это снова вызывает паузы. Меньше пауз, чем в случае с GC "Остановить мир", и эти паузы не затрагивают все потоки. Тем не менее, паузы, тем не менее.
«Фоновый GC» - это расширенный GC, в котором потоку GC не нужно блокировать кучу. Это удаляет лишние паузы, описанные в предыдущем абзаце; только ограниченные паузы остаются, когда молодые поколения собраны (то, что Microsoft называет «сбором переднего плана»).
Примечание: существуют «скрытые затраты» с одновременным GC и фоновым GC. Чтобы эти ГХ работали правильно, доступ к памяти из аппликативных потоков должен осуществляться очень специфическими способами, которые оказывают небольшое влияние на производительность. Кроме того, поток GC может оказывать неблагоприятное влияние на кэш-память, что косвенно снижает производительность. Для чисто вычислительной задачи, не требующей взаимодействия с пользователем, сборщик остановок может в среднем дать несколько лучшую производительность (например, вычисление продолжительностью в двадцать часов завершится через девятнадцать часов). Но это крайний случай, и в большинстве случаев параллельный и фоновый GC лучше.