Jaka jest różnica między pamięcią podręczną a buforem?

12

Czy powiedzenie, że pamięć podręczna jest specjalnym rodzajem bufora, jest poprawne? Oba wykonują podobne funkcje, ale czy jest jakaś zasadnicza różnica, której mi brakuje?

Dharini Chandrasekaran
źródło

Odpowiedzi:

12

Z artykułu Wikipedii na temat buforów danych :

bufor to obszar fizycznej pamięci służący do tymczasowego przechowywania danych podczas przenoszenia ich z jednego miejsca do drugiego

A buforowe kończy się na rowerze i przytrzymanie przez każdy element danych, który jest przesyłany z jednego urządzenia do drugiego (na przykład przy użyciu bufora kołowego w przetwarzania audio). Bufor na to pozwala - „bufor” danych przed i za bieżącą pozycją w strumieniu danych.

Rzeczywiście istnieją pewne typowe aspekty bufora i pamięci podręcznej. Jednak pamięć podręczna w konwencjonalnym sensie zwykle nie przechowuje wszystkich danych, gdy są przenoszone z miejsca na miejsce (tj. Pamięć podręczna procesora).

Celem pamięci podręcznej jest przechowywanie danych w przejrzysty sposób, tak aby wystarczyło buforowanie wystarczającej ilości danych, aby pozostałe dane mogły zostać przesłane bez żadnych strat wydajności. W tym kontekście pamięć podręczna „pobiera” tylko niewielką ilość danych (w zależności od szybkości przesyłania, wielkości pamięci podręcznej itp.).

Główną różnicą jest to, że bufor ostatecznie pomieści wszystkie dane. I odwrotnie, pamięć podręczna mogła pomieścić wszystkie, niektóre lub żadną z danych (w zależności od projektu). Jednak dostęp do pamięci podręcznej jest uzyskiwany tak, jakbyś miał bezpośredni dostęp do danych - to, co dokładnie dostaje się do pamięci podręcznej, jest przezroczyste dla „użytkownika” pamięci podręcznej.


Różnica polega na interfejsie . Gdy używasz pamięci podręcznej w celu uzyskania dostępu do źródła danych, używasz go tak, jakby pamięć podręczna była źródłem danych - możesz uzyskać dostęp do każdej części źródła danych za pośrednictwem pamięci podręcznej, a pamięć podręczna określi, skąd pochodzą dane ( sama pamięć podręczna lub źródło). Sama pamięć podręczna określa, które części danych mają zostać wstępnie załadowane (zwykle tylko początek, ale czasami wszystkie), podczas gdy używany algorytm zastępowania pamięci podręcznej określa, co / kiedy rzeczy zostaną usunięte z pamięci podręcznej. Najlepszym tego przykładem jest system, oprócz samej pamięci podręcznej procesora , jest moduł preetcher / readahead. Oba ładują te części danych, które według nich najbardziej wykorzystasz do pamięci, i przywracają dysk twardy, jeśli coś nie jest buforowane.

I odwrotnie, nie można użyć bufora do natychmiastowego przeniesienia lokalizacji w strumieniu danych, chyba że nowa część została już przeniesiona do bufora. Aby to zrobić, konieczne jest przeniesienie bufora (biorąc pod uwagę, że nowa lokalizacja przekracza długość bufora), co skutecznie wymaga „ponownego uruchomienia” bufora z nowej lokalizacji. Najlepszym tego przykładem jest przesunięcie suwaka w filmie na Youtube.

Innym dobrym przykładem bufora jest odtwarzanie dźwięku w Winampie. Ponieważ pliki audio muszą być dekodowane przez procesor, może upłynąć trochę czasu od momentu wczytania utworu, do przetworzenia dźwięku do momentu przesłania go na kartę dźwiękową. Winamp buforuje niektóre dane audio, dzięki czemu jest już wystarczająco przetworzonych danych audio, aby uniknąć jakichkolwiek „blokad” (tj. Procesor zawsze przygotowuje dźwięk, który usłyszysz w ciągu kilkuset milisekund, nigdy nie jest on w czasie rzeczywistym ; to, co słyszysz, pochodzi z bufora, czyli tego, co procesor przygotowywał w przeszłości).

Przełom
źródło
Rozumiem, że w twoim przykładzie YouTube, jeśli film został całkowicie zbuforowany, tj. Pobrany na twoje urządzenie, jest po prostu buforowany i nie musisz szukać nowej lokalizacji za każdym razem, gdy przesuwasz slajd, chyba że odświeżysz stronę lub przeładujesz wideo. Czy to byłoby poprawne?
PeanutsMonkey
@PeanutsMonkey poprawny, film z YouTube jest pobierany bezpośrednio do pamięci podręcznej przeglądarki podczas buforowania. Bufor w tym przypadku jest po prostu terminem wysokiego poziomu, ponieważ zawsze przeglądasz to, co aktualnie znajduje się w pamięci podręcznej. Podczas buforowania wideo jest przenoszone do pamięci podręcznej (dzielą tę samą lokalizację fizyczną). Zaktualizowałem odpowiedź innym przykładem bufora w kontekście odtwarzaczy audio.
Przełom
2
wersja tl; dr: Jeśli chcesz jak najszybciej uzyskać z niej dane, jest to bufor. Jeśli chcesz przechowywać dane tak długo, jak to możliwe, jest to pamięć podręczna.
David Schwartz
10

Bardziej trafne byłoby stwierdzenie, że pamięć podręczna jest szczególnym wzorcem użycia bufora, co oznacza wielokrotne użycie tych samych danych. Większość zastosowań „bufora” oznacza, że ​​dane zostaną opróżnione lub odrzucone po jednym użyciu (choć niekoniecznie tak jest), natomiast „pamięć podręczna” oznacza, że ​​dane zostaną ponownie wykorzystane wiele razy. Buforowanie często oznacza również, że dane są przechowywane, ponieważ są one jednocześnie wykorzystywane, chociaż niekoniecznie tak jest (jak w przypadku pobierania wstępnego itp.), Natomiast buforowanie oznacza, że ​​dane są przechowywane do późniejszego wykorzystania.

Jednak zarówno implementacja, jak i użytkowanie nakładają się na siebie w dużym stopniu.

puszysty
źródło
3

Jedną ważną różnicą między pamięcią podręczną a buforem jest:

Bufor jest częścią pamięci podstawowej. Są to struktury obecne i dostępne z pamięci podstawowej (RAM).

Z drugiej strony pamięć podręczna to osobna pamięć fizyczna w hierarchii pamięci komputera.

Bufor jest czasami nazywany również - pamięcią podręczną bufora. Ta nazwa podkreśla fakt, że użycie bufora jest podobne do użycia pamięci podręcznej, tzn. Do przechowywania danych. podczas gdy różnica leży w kontekście jego użycia.

Bufory służą do tymczasowego przechowywania danych, podczas gdy dane są przenoszone z jednego obiektu do drugiego. EX: kiedy wideo jest przenoszone z Internetu na nasz komputer, bufory wyświetlacza służą do przechowywania ramek wideo, które zostaną wyświetlone w następnej kolejności. (TO ZWIĘKSZA QoS, JAK WIDEO MUSI BYĆ PŁYNNIE URUCHOMIONE PO POMYŚLNYM PROCESIE BUFOROWANIA.) Np .: innym przykładem jest scenariusz, w którym zapisujemy dane do naszych plików. Nowo zapisane dane nie są natychmiast kopiowane do pamięci dodatkowej. Wprowadzone zmiany są przechowywane w buforze, a następnie zgodnie z zaprojektowanymi zasadami, zmiany są odzwierciedlane z powrotem w pliku w pamięci dodatkowej (dysku twardym).

Z drugiej strony pamięci podręczne są używane między pamięcią podstawową a procesorami, aby wypełnić lukę między szybkością wykonywania pamięci RAM a procesorem. Również najczęściej używane dane są przechowywane w pamięci podręcznej, aby ograniczyć dostęp do pamięci RAM.

Rubal
źródło
-1 piszesz „pamięć podręczna to osobna pamięć fizyczna” <--- Nie. Niekoniecznie. IE przechowuje pamięć podręczną na dysku twardym i bez wątpienia ładuje ją do pamięci RAM stackoverflow.com/questions/854412/ ... Nie sądzę, aby kod C mógł określać ładowanie go do pamięci fizycznej zwanej pamięcią podręczną. To, co dostaje się do tej pamięci podręcznej, jest raczej kwestią niskiego poziomu, być może tylko system operacyjny może to określić. Ale nadal nazywa się to cache, mimo że jest w pamięci RAM. A kałamarnica serwera WWW może skonfigurować pamięć podręczną, nie ma powodu, aby sądzić, że to wszystko jest w fizycznej pamięci podręcznej lub musi.
barlop
buforowanie jest funkcją, nie musi znajdować się w specjalnej pamięci
barlop
1

Wspólna rzecz: oba są pośrednimi komponentami do przechowywania danych (oprogramowaniem lub sprzętem) pomiędzy obliczeniami a „główną” pamięcią.

Dla mnie różnica jest następująca:

Bufor:

  • Obsługuje sekwencyjny dostęp do danych (np. Odczyt / zapis danych z pliku lub gniazda)
  • Umożliwia interfejs między obliczeniami a pamięcią główną, dostosowuje do siebie różne wzorce przesyłania danych producenta danych i odbiorcy danych. Np. Obliczenia zapisują małe fragmenty danych, ale dysk może przyjmować tylko fragmenty danych o określonym rozmiarze. Bufor gromadzi zatem małe elementy jako dane wejściowe i grupuje je w większe części danych wyjściowych.
  • To jest jak wzorzec projektowy adaptera . Łączy dwa interaktywne komponenty, które nie mogą bezpośrednio współpracować.
  • Przykłady: bufor dysku, BufferedReader w języku Java, buforowanie grafiki komputerowej.

Pamięć podręczna:

  • Obsługuje losowy dostęp do danych (np. Pamięć podręczna procesora buforuje wiersze pamięci, które znajdują się niepotrzebnie sekwencyjnie).
  • Optymalizuje dostęp do głównej pamięci, czyni ją szybszą. Np. Pamięć podręczna procesora pozwala uniknąć dostępu do pamięci, dzięki czemu polecenia procesora są szybsze.
  • To jest jak wzór dekoratora . Łączy (często w sposób przezroczysty) dwa wzajemnie oddziałujące elementy, które w zasadzie mogłyby bezpośrednio współpracować, ale przyspiesza interakcję.
  • Przykłady: pamięć podręczna procesora, pamięć podręczna strony, serwer proxy sieci Web, pamięć podręczna przeglądarki.
Alexey
źródło