Chciałbym wiedzieć, jaka jest rzeczywista różnica między caching
i memoization
.
Jak widzę, oba obejmują unikanie powtarzających się wywołań funkcji w celu uzyskania danych poprzez ich przechowywanie .
Jaka jest główna różnica między nimi?
Chciałbym wiedzieć, jaka jest rzeczywista różnica między caching
i memoization
.
Jak widzę, oba obejmują unikanie powtarzających się wywołań funkcji w celu uzyskania danych poprzez ich przechowywanie .
Jaka jest główna różnica między nimi?
Odpowiedzi:
Memoizacja to specyficzna forma buforowania, która obejmuje buforowanie wartości zwracanej funkcji na podstawie jej parametrów .
Buforowanie jest terminem bardziej ogólnym; na przykład buforowanie HTTP to buforowanie, ale nie zapamiętywanie.
Wikipedia mówi :
Chociaż jest to związane z buforowaniem, zapamiętywanie odnosi się do konkretnego przypadku tej optymalizacji, odróżniając ją od form buforowania, takich jak buforowanie lub zastępowanie stron.
If-Match
i wygaśnięcia. Zapamiętywanie ma sens tylko dla czystej funkcji, co rzadko jest HTTP.
Jak widziałem ich użycie, „zapamiętywanie” to „buforowanie wyniku funkcji deterministycznej”, która może być odtworzona w dowolnym momencie, mając tę samą funkcję i dane wejściowe.
„Buforowanie” obejmuje w zasadzie każdą strategię buforowania wyjścia, niezależnie od tego, czy wartość źródłowa jest odtwarzalna w danym czasie, czy nie. W rzeczywistości buforowanie jest również używane w odniesieniu do strategii buforowania danych wejściowych , takich jak pamięć podręczna zapisu na dysku lub w pamięci. Jest to więc termin znacznie bardziej ogólny.
Myślę, że termin buforowanie jest zwykle używany, gdy przechowujesz wyniki operacji IO lub w zasadzie wszelkie dane przychodzące z zewnątrz (pliki, sieć, zapytania bazy danych). Zapamiętywanie terminów zwykle dotyczy przechowywania wyników własnych obliczeń, na przykład w kontekście programowania dynamicznego.
Memoizacja jest specjalną formą buforowania wyniku funkcji deterministycznej. Oznacza to, że buforowanie wyniku poza funkcją nie jest zapamiętywaniem, ponieważ funkcja musiałaby zmutować pamięć podręczną podczas obliczania nowego wyniku (nie znajdującego się już w pamięci podręcznej), więc nie byłaby już (czystą) funkcją. Zapamiętywanie generalnie oznacza przekazanie pamięci podręcznej jako dodatkowego argumentu (w funkcji pomocniczej). Zapamiętywanie zoptymalizuje funkcje, które muszą obliczać wartości kilka razy dla pojedynczego dostępu. Buforowanie zoptymalizuje funkcje, które są wywoływane kilka razy z tymi samymi parametrami. Innymi słowy, Memoization zoptymalizuje pierwszy dostęp, niezależnie od tego, czy buforowanie będzie optymalizować tylko powtarzające się dostępy.