12

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

4 ответа4

11

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

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

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

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

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

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


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

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

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

10

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

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

3

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

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

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

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

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

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

1

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

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

Буфер:

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

кэш:

  • Обрабатывает произвольный доступ к данным (например, кэш-память ЦП кэширует строки памяти, которые расположены не обязательно последовательно).
  • Оптимизирует доступ к основному хранилищу, делает его быстрее. Например, кэш CPU избегает доступа к памяти, что ускоряет выполнение команд CPU.
  • Это как шаблон дизайна декоратора . Он объединяет (часто прозрачно) два взаимодействующих компонента, которые в принципе могут взаимодействовать напрямую, но ускоряет взаимодействие.
  • Примеры: кеш процессора, кеш страниц, веб-прокси, кеш браузера.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .