web-dev-qa-db-ja.com

キャッシングとメモ化の違いは何ですか?

cachingmemoizationの実際の違いは何か知りたいです。
私が見ているように、両方ともデータを保存することでデータを取得するために繰り返される関数呼び出しを避けるを伴います。

2つのコアの違いは何ですか?

106
John

メモ化は、パラメータに基づいて関数の戻り値をキャッシュするを伴う特定の形式のキャッシングです。

キャッシングはより一般的な用語です。たとえば、HTTPキャッシングはキャッシングですが、メモ化ではありません。

ウィキペディア says

キャッシングに関連していますが、メモ化はこの最適化の特定のケースを指し、バッファリングやページ置換などのキャッシング形式とは区別されます。

104
SLaks

私がそれらを使用しているのを見たように、「メモ化」は「決定論的関数の結果をキャッシュする」ことであり、同じ関数と入力が与えられればいつでも再現できます。

「キャッシュ」には、ソース値が特定の時間に再現可能かどうかにかかわらず、基本的に出力バッファリング戦略が含まれます。実際、キャッシングは、ディスクまたはメモリの書き込みキャッシュなど、inputバッファリング戦略を参照するためにも使用されます。だから、はるかに一般的な用語です。

46
harpo

用語キャッシュは、IO操作、または基本的に外部から送られてくるデータ(ファイル、ネットワーク、dbクエリ)の結果を保存するときに使用されると思います。用語メモ化は通常動的プログラミングのコンテキストなどで、独自の計算の結果を保存します。

6
MK.

メモ化は、確定的関数の結果をキャッシュする特別な形式です。これは、関数が新しい結果(まだキャッシュにない)を計算するときにキャッシュを変更する必要があるため、関数の外に結果をキャッシュすることはメモ化ではないことを意味します。メモ化は一般に、キャッシュを(ヘルパー関数で)追加の​​引数として渡すことを意味します。メモ化は、1回のアクセスで複数回値を計算する必要がある関数を最適化します。キャッシングは、同じパラメーターで複数回呼び出される関数を最適化します。言い換えれば、メモ化は最初のアクセスを最適化します。キャッシングが繰り返しアクセスのみを最適化するかどうかです。

1

memoizationtablingとしても知られているという他の素晴らしい答えに加えたいと思います。また、メモ化とキャッシングが何であるかを学ぶ人のために、その用語を知ることも重要だと思います。

0
Vadim S.