Яка різниця між кешем і буфером?


Відповіді:


12

З статті Вікіпедії про буфери даних :

буфер - це область зберігання фізичної пам'яті, яка використовується для тимчасового зберігання даних під час переміщення з одного місця в інше

Через буфер закінчується на велосипеді через та проведення кожен фрагмент даних , який передається з одного місця зберігання в іншу (наприклад , при використанні циклічного буфера в обробці звуку). Буфер дозволяє саме це - "буфер" даних до і після вашого поточного положення в потоці даних.

Дійсно, є деякі загальні аспекти буфера та кешу. Однак кеш у звичайному розумінні зазвичай не зберігає всіх даних, коли він переміщується з місця на місце (тобто кеш процесора).

Призначення кешу полягає в тому, щоб зберігати дані прозорим способом, таким чином, щоб було достатньо кешованих даних, щоб решту даних можна було передати без будь-якого штрафу за продуктивність. У цьому контексті кеш лише "заздалегідь отримує" невелику кількість даних (залежно від швидкості передачі, розмірів кешу тощо).

Основна відмінність полягає в тому, що в результаті буфер зберігав усі дані. І навпаки, кеш може містити всі, деякі або будь-які дані (залежно від конструкції). Однак кеш доступний так, як якщо б ви безпосередньо зверталися до даних в першу чергу - те, що саме відбувається кешування, є прозорим для "користувача" кешу.


Різниця полягає в інтерфейсі . Коли ви використовуєте кеш для доступу до джерела даних, ви використовуєте його так, ніби кеш є джерелом даних - ви можете отримати доступ до кожної частини джерела даних через кеш, і кеш визначатиме, звідки беруться дані ( кеш-пам'ять, або джерело). Сам кеш визначає, які частини даних попередньо завантажувати (зазвичай це лише початок, але іноді всі), тоді як використовуваний алгоритм заміни кешу визначає, що / коли вилучати речі з кешу. Найкращим прикладом цього є система, окрім самого кешу процесора , - prefetcher / readahead. Обидва завантажують частини даних, які, на їх думку, ви будете використовувати найбільше в пам’яті, і повертаєтеся на жорсткий диск, якщо щось не є кешованим.

І навпаки, буфер не може бути використаний для миттєвого переміщення вашого місцезнаходження в потоці даних, якщо нова частина вже не була переміщена в буфер. Для цього потрібно буде перемістити буфер (з огляду на те, що нове місце перевищує довжину буфера), фактично вимагаючи від вас "перезапустити" буфер з нового місця розташування. Найкращий приклад цього - переміщення повзунка у відеоролику Youtube.

Ще одним хорошим прикладом буфера є відтворення аудіозапису в Winamp. Оскільки аудіофайли потрібно розшифрувати процесором, проходить деякий час між тим, як читати пісню, до того, як аудіо обробляється, і коли він надсилається на вашу звукову карту. Winamp буде буферувати частину аудіоданих, щоб було достатньо оброблених аудіоданих, щоб уникнути будь-яких «блокувань» (тобто ЦП завжди готує аудіо, яке ви почуєте за кілька сотень мілісекунд, це ніколи в реальному часі ; те, що ви чуєте, походить з буфера, який саме підготував процесор раніше).


Я вважаю, що у вашому прикладі Youtube, якщо відео повністю завантажено, тобто завантажено на ваш пристрій, воно просто кешується, і вам не потрібно шукати нове місце кожного разу, коли ви переміщуєте слайд, якщо ви не оновите сторінку або не перезавантажте відео. Це було б правильно?
PeanutsMonkey

@PeanutsMonkey правильно, відео Youtube завантажується безпосередньо в кеш браузера під час завантаження. Буфер в цьому випадку є просто терміном високого рівня, оскільки ви завжди переглядаєте те, що зараз знаходиться в кеші. Коли відео завантажується, воно переміщується в кеш-пам'ять (вони мають однакове фізичне розташування). Я оновив відповідь ще одним прикладом буфера, в контексті аудіоплеєрів.
Прорив

2
tl; dr версія: Якщо ви хочете отримати дані з них якомога швидше, це буфер. Якщо ви хочете зберегти дані в ньому якомога довше, це кеш.
Девід Шварц

10

Точніше було б сказати, що кеш - це певна схема використання буфера, яка передбачає багаторазове використання одних і тих же даних. Більшість застосувань "буфера" означають, що дані будуть вилучені або відкинуті після одноразового використання (хоча це не обов'язково так), тоді як "кеш" означає, що дані будуть повторно використані. Кешування також часто означає, що дані зберігаються, оскільки вони також одночасно використовуються, хоча це не обов'язково так (як у попередньому доборі тощо), тоді як буферизація означає, що дані зберігаються для подальшого використання.

Однак, безумовно, є велике перекриття як в реалізації, так і використанні.


3

Важлива відмінність кешу від буфера:

Буфер - частина первинної пам'яті. Вони є структурами, присутніми та доступними з первинної пам'яті (ОЗП).

З іншого боку, кеш - це окрема фізична пам'ять в ієрархії пам'яті комп'ютера.

Буфер також іноді називають - буфер кеша. Ця назва наголошує на тому, що використання буфера схоже на використання кешу, тобто для зберігання даних. при цьому різниця полягає в контексті його використання.

Буфери використовуються для тимчасового зберігання даних, тоді як дані переміщуються з одного об'єкта на інший. Приклад: при переміщенні відео з Інтернету на наш ПК буфери дисплея використовуються для зберігання кадрів відео, які відображатимуться далі. . Щойно записані дані не копіюються миттєво у вторинну пам'ять. Внесені зміни зберігаються в буфері, після чого відповідно до розробленої політики зміни відображаються назад у файлі у вторинній пам'яті (жорсткому диску).

Кеші, з іншого боку, використовуються між первинною пам'яттю та процесорами, щоб подолати розрив між швидкістю оперативної пам'яті та процесором. Також дані, які найчастіше звертаються, зберігаються в кеші, щоб зменшити доступ до оперативної пам'яті.


-1 ви пишете "кеш - це окрема фізична пам'ять" <--- Ні. Не обов'язково. IE зберігає кеш на жорсткому диску і, без сумніву, завантажує його в оперативну пам'ять stackoverflow.com/questions/854412/… Я не думаю, що код C може вказати для завантаження його у фізичну пам'ять, відому як кеш. Що вкладається в цей кеш - це більш низький рівень, можливо, лише ОС може вказати. Але це все ще називається кешем, хоча він знаходиться в оперативній пам'яті. А кальмар веб-сервера може створити кеш-пам'ять, без причин думати, що це все у фізичній кеш-пам'яті або не потрібно.
барлоп

кешування - це функція, воно не повинно бути в спеціальній пам'яті
барлоп

1

Спільне: обидва є посередницькими компонентами зберігання даних (програмне чи апаратне забезпечення) між обчисленнями та "основним" сховищем.

Для мене різниця полягає в наступному:

Буфер:

  • Обробляє послідовний доступ до даних (наприклад, читання / запис даних з файлу або сокета)
  • Вмикає інтерфейс між обчисленнями та основним сховищем, пристосовує один до одного різні структури передачі даних виробника даних та споживача даних. Наприклад, обчислення записують невеликі шматки даних, але диск може приймати лише фрагменти даних певного розміру. Таким чином, буфер накопичує невеликі шматочки як вхідні дані і перегрупує їх на більші шматки виводу.
  • Так це як модель дизайну адаптера . Він поєднує два взаємодіючих компоненти, які не можуть взаємодіяти безпосередньо.
  • Приклади: дисковий буфер, BufferedReader на мові Java, виправлення в комп'ютерній графіці.

Кеш:

  • Обробляє випадковий доступ до даних (наприклад, кеш-пам'ять процесора кешує рядки пам'яті, які розташовані непотрібно послідовно).
  • Оптимізує доступ до основного сховища, робить його швидшим. Наприклад, кеш процесора уникає доступу до пам'яті, тим самим збільшуючи команди CPU.
  • Це як візерунок дизайну Decorator . Він поєднує (часто прозоро) два взаємодіючих компоненти, які в принципі можуть взаємодіяти безпосередньо, але це робить взаємодію швидшою.
  • Приклади: кеш процесора, кеш сторінки, веб-проксі, кеш браузера.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.