В чем разница между кэшированием и запоминанием?
Я хотел бы знать, в чём заключается реальная разница между кэшированием и запоминанием. На мой взгляд, оба включают избегание повторных вызовов функций для получения данных путем их хранения.
Какая разница между этими двумя?
4 ответа
Мемоизация - это особая форма кэширования, которая включает в себя кэширование возвращаемого значения функции на основе ее параметров.
Кэширование - более общий термин; Например, HTTP-кэширование - это кеширование, а не запоминание.
Википедия говорит:
Хотя запоминание относится к кешированию, оно относится к конкретному случаю этой оптимизации, отличая ее от форм кеширования, таких как буферизация или замена страниц.
Как я видел, как они используются, "запоминание" - это "кэширование результата детерминированной функции", которая может быть воспроизведена в любое время при той же самой функции и входных данных.
"Кэширование" включает в себя в основном любую стратегию буферизации вывода, независимо от того, воспроизводится или нет значение источника в данный момент времени. Фактически, кеширование также используется для обозначения стратегий буферизации ввода, таких как кэш записи на диске или в памяти. Так что это гораздо более общий термин.
Я думаю, что термин кэширование обычно используется, когда вы сохраняете результаты операций ввода-вывода или, в основном, любые данные, которые приходят к вам извне (файлы, сеть, запросы к базе данных). Термин "запоминание" обычно применяется к хранению результатов ваших собственных вычислений, например, в контексте динамического программирования.
Мемоизация - это особая форма кэширования результата детерминированной функции. Это означает, что кэширование результата вне функции не является запоминанием, потому что функция должна будет изменять кэш при вычислении нового результата (еще не в кеше), чтобы она больше не была (чистой) функцией. Мемоизация обычно подразумевает передачу кеша в качестве дополнительного аргумента (во вспомогательной функции). Мемоизация оптимизирует функции, которые должны вычислять значения несколько раз для одного доступа. Кэширование оптимизирует функции, которые вызываются несколько раз с одинаковыми параметрами. Другими словами, Memoization оптимизирует первый доступ, если кеширование только оптимизирует периодические обращения.
Я хотел бы добавить к другим отличным ответам, что памятка также известна как табулирование. Я думаю, что также важно знать этот термин для тех, кто изучает, что такое запоминание и кэширование.