Практично ли включать адаптивную или оптимизирующую стратегию памяти в библиотеку? - PullRequest
1 голос
/ 31 октября 2009

У меня есть библиотека, которая выполняет ввод / вывод. Есть пара внешних ручек для настройки размеров буферов памяти, используемых внутри. Когда я провел несколько тестов, я обнаружил, что размеры буферов могут существенно повлиять на производительность.

Но оптимальный размер зависит от множества факторов: доступной памяти на ПК, размера обрабатываемых файлов (от очень маленьких до огромных), количества файлов, скорости вывода поток относительно входного потока, и я не уверен, что еще.

Имеет ли смысл встраивать адаптивную стратегию памяти в библиотеку? или лучше просто подумать над этим и позволить пользователям библиотеки понять, что использовать?

Кто-нибудь делал что-то подобное - и насколько это сложно? Это сработало?

Учитывая разный размер буфера, я полагаю, что библиотека могла бы отслеживать время, необходимое для различных операций, а затем она могла бы принять решение о том, какой размер был оптимальным. Я мог бы представить, чтобы библиотека вращалась через буферы разных размеров в начальных раундах ввода / вывода ... и затем она в конечном итоге выполняла вычисления и корректировала размер буфера в будущих раундах в зависимости от результатов. Но потом, как часто нужно перепроверять? Как часто настраивать?

1 Ответ

2 голосов
/ 31 октября 2009

Адаптивный подход иногда называют «автономным», используя аналогию вегетативной нервной системы человека: вы сознательно не контролируете частоту сердечных сокращений и дыхание, ваша вегетативная нервная система делает это.

Вы можете прочитать о некоторых из этих здесь и здесь (извинения за пробки, но я хотел показать, что к этой концепции относятся серьезно, и она проявляется в реальной жизни продукты.)

Мой опыт использования продуктов, которые пытаются это сделать, заключается в том, что они действительно работают, но могут сделать меня несчастным: это потому, что они склонны придерживаться подхода «Отец знает лучше». Вы вносите небольшие (как вы считаете) небольшие изменения в свое приложение или среду, и происходит непредвиденное. Вы не знаете почему, и вы не знаете, хорошо ли это. Итак, мое правило для автономии:

Скажи мне, что ты делаешь и почему

Теперь иногда математика довольно сложна - учтите, что некоторые автономные системы находятся в тренде и, следовательно, вносят прогнозирующие изменения (количество запросов этого типа растет, давайте предоставим больше ресурсов X), поэтому математические модели нетривиальны. Следовательно, простые объяснения не всегда доступны. Однако некоторый уровень обратной связи с наблюдающими людьми может быть обнадеживающим.

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