В чем разница между кэшированием и запоминанием?

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

Какая разница между этими двумя?

4 ответа

Решение

Мемоизация - это особая форма кэширования, которая включает в себя кэширование возвращаемого значения функции на основе ее параметров.

Кэширование - более общий термин; Например, HTTP-кэширование - это кеширование, а не запоминание.

Википедия говорит:

Хотя запоминание относится к кешированию, оно относится к конкретному случаю этой оптимизации, отличая ее от форм кеширования, таких как буферизация или замена страниц.

Как я видел, как они используются, "запоминание" - это "кэширование результата детерминированной функции", которая может быть воспроизведена в любое время при той же самой функции и входных данных.

"Кэширование" включает в себя в основном любую стратегию буферизации вывода, независимо от того, воспроизводится или нет значение источника в данный момент времени. Фактически, кеширование также используется для обозначения стратегий буферизации ввода, таких как кэш записи на диске или в памяти. Так что это гораздо более общий термин.

Я думаю, что термин кэширование обычно используется, когда вы сохраняете результаты операций ввода-вывода или, в основном, любые данные, которые приходят к вам извне (файлы, сеть, запросы к базе данных). Термин "запоминание" обычно применяется к хранению результатов ваших собственных вычислений, например, в контексте динамического программирования.

Мемоизация - это особая форма кэширования результата детерминированной функции. Это означает, что кэширование результата вне функции не является запоминанием, потому что функция должна будет изменять кэш при вычислении нового результата (еще не в кеше), чтобы она больше не была (чистой) функцией. Мемоизация обычно подразумевает передачу кеша в качестве дополнительного аргумента (во вспомогательной функции). Мемоизация оптимизирует функции, которые должны вычислять значения несколько раз для одного доступа. Кэширование оптимизирует функции, которые вызываются несколько раз с одинаковыми параметрами. Другими словами, Memoization оптимизирует первый доступ, если кеширование только оптимизирует периодические обращения.

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

Другие вопросы по тегам