Несмотря на то, что эта тема уже несколько устарела, я привожу практический пример одной реализации, которую следует использовать в качестве справочного материала только в том случае, если вы достаточно хорошо понимаете общую картину.
У нас была проблема водно приложение для «больших данных», где мы лучше, чем менеджер виртуальной памяти, добавляем, какие страницы должны быть выгружены из редких «огромных файлов».Что мы сделали, так это то, что у нас был выделенный поток («inmemadvisor») для получения «нужных» запросов, каждый из которых имел приоритет.Этот поток поддерживает приоритетный список запросов и отправляет «подсказки» чтения из памяти в пул потоков, где наибольшее количество потоков обрабатывает запросы с высоким приоритетом, а наименьшая часть пула обрабатывает наименьший приоритет (вы, вероятно, поняли это).
Затем у нас есть параметры для управления количеством потоков в пуле и некоторые другие изящные детали.
Плюсы этой реализации:
- мы в 10 раз превосходим пейджинг виртуальной машины по умолчаниюмодель (в Windoze Server 2008/2012)
- , пока пейджинг становится «мягким», и мы можем забыть данные, которые нам больше не нужны (без срочной необходимости вставлять страницы с серьезной ошибкой), производительностьлучше, чем хорошо
- мы можем использовать всю доступную свободную физическую оперативную память для ускорения вычислений
- каждый добавляемый вами новый МБ памяти может повысить производительность
Минусы:
- если у вас не хватит ОЗУ (локальность нарушена), производительность будет свинья ... ну, это будет то же самоебез этой реализации
- это требует некоторого тщательного проектирования и хорошей реализации, чтобы оправдать ее выполнение
- в некоторых приложениях вам может потребоваться добавить дополнительную логику мониторинга и управления для управления "inmemadvisor", чтобыхороший гражданин
Итак, вкратце: это то, чего лучше не делать, но, с другой стороны, это то, что делает программирование положительным испытанием ;-) Кстати: наша реализацияПревосходит Linux madvice () по производительности с нашим приложением, но не настолько универсален, как это.
Cheers, // Jari