В чем разница между кешем и буфером?


12

Говорят ли кеш как особый вид буфера правильно? Они оба выполняют схожие функции, но есть ли какое-то основное различие, которое мне не хватает?


Ответы:


12

Из статьи Википедии о буферах данных :

буфер - это область физической памяти, используемая для временного хранения данных во время их перемещения из одного места в другое

Через буфер заканчивается на велосипеде через и проведение каждый фрагмент данных , который передается из одного места хранения в другую (например , при использовании циклического буфера в обработке звука). Буфер допускает только это - «буфер» данных до и после вашей текущей позиции в потоке данных.

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

Цель кэша - хранить данные прозрачным образом, чтобы кэшировалось достаточно данных, чтобы оставшиеся данные могли быть переданы без потери производительности. В этом контексте кэш-память «предварительно извлекает» только небольшой объем данных (в зависимости от скорости передачи, размера кеша и т. Д.).

Основное отличие состоит в том, что буфер в конечном итоге будет содержать все данные. И наоборот, кеш может содержать все, некоторые или ни одного из данных (в зависимости от дизайна). Однако доступ к кешу осуществляется так, как если бы вы непосредственно обращались к данным - то, что именно кэшируется, прозрачно для «пользователя» кеша.


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

И наоборот, буфер не может быть использован для мгновенного перемещения вашего местоположения в потоке данных, если новая часть уже не была перемещена в буфер. Для этого потребуется переместить буфер (учитывая, что новое местоположение превышает длину буфера), что фактически потребует от вас «перезапустить» буфер из нового местоположения. Лучший пример этого - перемещение слайдера в видео на Youtube.

Другим хорошим примером буфера является воспроизведение звука в Winamp. Поскольку аудиофайлы должны декодироваться процессором, требуется некоторое время между считыванием песни, обработкой звука и его передачей на звуковую карту. Winamp буферизует некоторые аудиоданные, так что уже обработано достаточное количество аудиоданных, чтобы избежать каких-либо «зависаний» (т. Е. Процессор всегда готовит звук, который вы услышите за несколько сотен миллисекунд, он никогда не будет в реальном времени То, что вы слышите, исходит из буфера, который процессор готовил в прошлом.


Я полагаю, что в вашем примере с YouTube, если видео полностью буферизовано, т.е. загружено на ваше устройство, оно просто кэшируется, и вам не нужно искать новое местоположение каждый раз, когда вы перемещаете слайд, если вы не обновите страницу или не перезагрузите видео. Это было бы правильно?
PeanutsMonkey

@PeanutsMonkey правильно, видео с YouTube загружается прямо в кеш вашего браузера по мере его буферизации. Буфер в этом случае просто высокоуровневый термин, так как вы всегда просматриваете то, что в данный момент находится в кэше. Поскольку видео буферизуется, оно перемещается в кэш (они находятся в одном физическом месте). Я обновил ответ другим примером буфера в контексте аудиоплееров.
Прорыв

2
tl; dr version: если вы хотите извлечь из него данные как можно быстрее, это буфер. Если вы хотите хранить данные как можно дольше, это кеш.
Дэвид Шварц

10

Было бы точнее сказать, что кеш - это конкретная схема использования буфера, которая подразумевает многократное использование одних и тех же данных. В большинстве случаев использование «буфера» подразумевает, что данные будут удалены или отброшены после однократного использования (хотя это не обязательно так), в то время как «кэш» подразумевает, что данные будут многократно использоваться повторно. Кэширование также часто подразумевает, что данные хранятся, поскольку они также используются одновременно, хотя это не обязательно так (как при предварительной выборке и т. П.), Тогда как буферизация подразумевает, что данные сохраняются для последующего использования.

Однако, как в реализации, так и в использовании, существует большое совпадение.


3

Одно важное отличие между кешем и буфером:

Буфер является частью первичной памяти. Они представляют собой структуры, доступные и доступные из первичной памяти (ОЗУ).

С другой стороны, кеш - это отдельная физическая память в иерархии памяти компьютера.

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

Буферы используются для временного хранения данных, когда данные перемещаются из одного объекта в другой. Пример: когда видео перемещается из Интернета на наш ПК, для отображения используются буферы для хранения кадров видео, которые будут отображаться далее. (ЭТО УВЕЛИЧИВАЕТ QoS, КАК ВИДЕО БУДЕТ ГЛУБИЛЬНО ПОСЛЕ ПОСЛЕ УСПЕШНОГО ПРОЦЕССА БУФЕРИНГА.) Пример: другой пример - сценарий, когда мы записываем данные в наши файлы. Вновь записанные данные не копируются во вторичную память мгновенно. Внесенные изменения сохраняются в буфере, а затем в соответствии с разработанной политикой изменения отражаются обратно в файл во вторичной памяти (на жестком диске).

Кэши, с другой стороны, используются между основной памятью и процессорами, чтобы сократить разрыв между скоростью выполнения ОЗУ и процессором. Также наиболее часто используемые данные хранятся в кэше, чтобы уменьшить доступ к оперативной памяти.


-1 ты пишешь "кеш это отдельная физическая память" <--- Нет. Не обязательно. IE хранит кеш на жестком диске и, без сомнения, загружает его в оперативную память. Stackoverflow.com/questions/854412/… Я не думаю, что код C может указать для загрузки его в физическую память, известную как кеш. То, что помещается в этот кеш, - это скорее вещь низкого уровня, может быть, только ОС может указать. Но он все еще называется кешем, хотя он находится в оперативной памяти. И веб-сервер squid может настроить кеш, нет причин думать, что это все в физической кеш-памяти или должно быть.
Барлоп

кэширование - это функция, она не должна быть в специальной памяти
barlop

1

Обычное дело: оба являются промежуточными компонентами хранения данных (программными или аппаратными) между вычислениями и «основным» хранилищем.

Для меня разница заключается в следующем:

буфер:

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

кэш:

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