Книга: Программист-прагматик. Путь от подмастерья к мастеру
Случаи, при которых балансировка ресурсов невозможна
Случаи, при которых балансировка ресурсов невозможна
Возникают моменты, когда основная схема распределения ресурсов просто не годится. Обычно это происходит в программах, которые используют динамические структуры данных. Одна подпрограмма выделяет область в памяти и связывает ее в структуру большего размера, где она и находится в течение некоторого времени.
Хитрость здесь состоит в установлении семантического инварианта для выделения памяти. Необходимо решить, кто несет ответственность за данные в составной структуре. Что произойдет при освобождении структуры верхнего уровня? Есть три основных варианта развития событий:
1. Структура верхнего уровня также несет ответственность за освобождение любых входящих в нее подструктур. Затем эти структуры рекурсивно удалят данные, содержащиеся в них, и т. д.
2. Структура верхнего уровня просто освобождается. Любые структуры, на которые она указывает (и на которых нет других ссылок), становятся «осиротевшими».
3. Структура верхнего уровня отказывается освобождать себя, если в нее входят какие-либо подструктуры.
В этом случае выбор зависит от условий, в которых находится каждая взятая в отдельности структура данных. Однако этот выбор должен быть явным для каждого случая, и ваше решение должно реализовываться последовательно. Реализация любого из представленных вариантов на процедурном языке программирования типа С может представлять проблему: структуры данных сами по себе не являются активными. В этих условиях для каждой из основных структур предпочтительнее написать модуль, обеспечивающий стандартные средства распределения и освобождения. (Этот модуль также обеспечивает распечатку результатов отладки, преобразование в последовательную и параллельную формы и средства обхода.)
И наконец, если отслеживание ресурсов становится слишком хитрой процедурой, можно создать собственную форму ограниченной автоматической сборки «мусора», реализуя схему подсчета ссылок для ваших динамически распределенных объектов. В книге «More Effective С++» ([Меу9б]) этой теме посвящен целый раздел.
- 25 Балансировка ресурсов
- 10. Заблуждения, которых не стоит допускать
- 3.6. Шаг 5. Балансировка ассортимента по глубине
- У некоторых сайтов адрес начинается с www. Что это обозначает?
- При неудачном выполнении некоторых операций Windows динамик издает пронзительный звук. Можно ли заставить его замолчать?
- Листинг 11.11. Три полезных способа кэширования графических ресурсов
- Что такое администратор ресурсов?
- Поисковые машины и каталоги как инструменты раскрутки «боевых» интернет-ресурсов и наполнения их контентом
- Примеры администраторов ресурсов
- 7. Распределение ресурсов, управление электропитанием и мониторинг состояния системы
- Листинг 13.6. Код формы, демонстрирующий загрузку встроенных ресурсов
- Характеристики администраторов ресурсов