Использовать ли многопоточность? |
Следует принять еще одно решение при проектировании сборщика мусора для С++: должен он быть однопоточным или многопоточным. Другими словами, должен ли сборщик мусора проектироваться как фоновый процесс, выполняющийся в своем потоке и собирающий мусор, когда позволит время процессора? Или сборщик мусора будет функционировать в том же потоке, что и процесс, его использующий, и собирать мусор тогда, когда возникает определенная ситуация в программе? Оба подхода обладают как достоинствами, так и недостатками. Основной довод в пользу создания многопоточного сборщика мусора — эффективность. Мусор можно собирать во время циклов бездействия процессора. Недостаток этого подхода — отсутствие какой-либо встроенной поддержки многопоточности в языке С++. Это значит, что любой многопоточный вариант будет зависеть от способности операционной системы поддерживать многозадачность. Это в свою очередь делает код непереносимым. Главное преимущество использования однопоточного сборщика мусора — переносимость. Он может применяться в тех случаях, когда многопоточность не поддерживается или цена ее применения слишком высока. Основной недостаток этого подхода — остановки программы во время сбора мусора. В данной главе применяется однопоточный подход, потому что он может быть реализован в любой программной среде С++. Следовательно, им смогут воспользоваться все читатели этой книги. Для сторонников многопоточности одно такое решение приведено в главе 3, которая знакомит с техническими приемами создания многопоточных программ на С++, успешно выполняющихся в операционной системе Windows.
|