Что такое кэшированные данные и кэширование? Использование кэширования в Web-приложениях

29.07.2019

Стоимость старших моделей смартфонов завышена. Все мы прекрасно понимаем, что разница в цене между 16 ГБ и 32+ ГБ моделями неоправданно большая. Речь идёт и о iPhone, и о всём многообразии флагманских представителей Android. В итоге человек берёт младшую модель с 16 гигабайтами хранилища на борту в надежде, что этого хватит. Но, зачастую реальность не оправдывает его ожидания.

Что съедает память в смартфоне

Для начала нужно понять, что указанный производителем объём памяти в устройстве - это не то же самое, что доступный пользователю объём памяти. То есть, на практике нам всегда доступно меньше памяти, чем написано на упаковке, и это справедливо как для iPhone, так и для семейства Android.

В обоих случаях операционная система устройства занимает 2-3 ГБ памяти, и вернуть их в распоряжение пользователя нельзя - эта пространство нужно для работы устройства.

Поэтому, когда вы подыскиваете новый смартфон, то считайте так: 16 ГБ на самом деле примерно равно 13 ГБ, а 32 ГБ - это в лучшем случае 29-30 ГБ.

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

Кроме того, со временем установленные приложения будут толстеть, накапливая в памяти данные кэша - это всё, что остаётся в устройстве в процессе работы приложения и после его закрытия. Любое приложение, получающее контент из Сети, сохраняет его на устройстве для более оперативного предоставления пользователю. Смотрите YouTube - получаете кэшированные видеозаписи. Слушаете музыку онлайн - она кэшируется локально. Сёрфите в Интернете через Chrome - посещённые в браузере странички кэшируются.

Если у вас Android и вы оказались в ситуации, когда срочно нужно получить несколько сотен мегабайт места под видео или фото, то очистите данные кэша.

Настройки -> Память -> тап на Данные кэша.

Также можно выборочно очистить кэш у отдельных приложений.

Настройки -> Приложения -> тап по толстому приложению -> Очистить кэш.

В iOS таких штатных средств нет, но есть сторонние утилиты .

В наши дни 1 ГБ для одной игры уже кажется вполне приемлемым. Периодическая чистка игр с предварительным вопросом к самому себе «буду ли я в это ещё играть?» поможет избавиться от надоевших и ненужных игрушек, которые продолжают занимать порядочное количество памяти. Это же справедливо для любых других приложений. Не понравилось приложение? Не планируете пользоваться им в будущем? Удалите его, не держите просто так на устройстве.

Загружаемая пользователем в устройство музыка становится всё качественнее. Некоторые уже не воспринимают 320 кбит mp3 и хотят только flac. Такие треки занимают в несколько раз больше места на устройстве.

Подумайте, обеспечат ли используемые вами наушники достаточное качество воспроизведения звука, чтобы вы почувствовали разницу? Быть может, mp3 среднего качества вполне хватит?

Если речь идёт о фото и видео , то всё ещё хуже. В топовые актуальные смартфоны ставят 8+ мегапиксельные камеры, которые умеют снимать FullHD видео с высоким фреймрейтом и делать фото очень большого разрешения. Такие фото и видео занимают очень много места. Для примера, 1 час видео в качестве 1080p может занять на вашем смартфоне 10 ГБ места.

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

С хранением фотографий может помочь мобильное приложение Dropbox - в нём есть функция автоматического переноса снимков из памяти устройства в облако.

И всё же, чем более технологичными становятся наши мобильные устройства, тем больше будет требоваться места под приложения и контент. Производители понимают это, и зачастую идут навстречу пользователю, встраивая в смартфоны и планшеты слот под съёмные карты памяти . К сожалению, пользователи iPhone, гуглофонов и некоторых других линеек Android лишены такого преимущества. Google предлагает нам хранить все данные в Сети.

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

Недавно у меня был достаточно горячий конфликт с популярным PHP пакетом для электронной коммерции. В результате мне захотелось рассказать об одной распространенной ошибке в архитектуре веб приложений.

Пакет с которым я работал, интенсивно использовал кэширование. Он не мог отдавать более 10 страниц в секунду, если не были включены некоторые «опциональные» настройки кэша. Очевидно что с такой производительностью они на самом деле не опциональны, а обязательны.

Я думаю, что когда у Вас есть такой замечательный инструмент как memcached, так и хочется использовать его для решения любой проблемы с производительностью. Но во многих случаях он не должен быть первым инструментом который Вы пытаетесь использовать. И вот почему:

- Кэширование может работать не для всех пользователе й - Вы открываете страницу - она загружается быстро. Но так ли это для всех пользователей? Кэширование очень часто позволяет оптимизировать время загрузки для большинства посетителей, но часто в реальности Вам надо чтобы страница загружалась быстро для всех без исключения (если следовать принципу six sigma). На практике запрос может промахиваться мимо кэша всегда для одного и того же пользователя, что еще более усугубляет ситуацию (Прим. переводчика : Я знаю совершенно реальный случай, когда в электронном магазине кэш срабатывал для 99% процентов пользователей и не работал для 1% посетителей имевших длинную историю покупок, как результат магазин работал медленно как раз для активных покупателей).

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

- Управление кэшем в реальности непростая задача - Вы когда-нибудь боролись с "убеганием кэша " или с ситуацией когда большое количество элементов кэша инвалидируются одновременно?

Альтернативный подход

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

Что это за способы?

Перед тем как вводить оптимизацию убедитесь что Вы прошлись по этому достаточно простому списку:

- Вы понимаете план исполнения каждого запроса? Если нет, установите long_query_time=0 и используйте команду mk-query-digest, чтобы получить полный список запросов. Выполните для каждого из них EXPLAIN, проанализируйте план исполнения.

Вы используете SELECT * чтобы потом использовать только небольшой набор столбцов? Или вы выбираете из БД много строк, но используете только некоторые из них? Если это так - то вы выбираете слишком много данных, ограничивая оптимизацию уровня СУБД, такую например как использование индексов.

Знаете ли Вы сколько именно запросов Вы используете для генерации одной страницы? Все ли они действительно необходимы? Можно ли какие-то из этих запросов превратить в один запрос или вообще убрать? (Прим. переводчика : Очень распространенная проблема. Реально знаю случай когда на странице отображался список учеников в классе, а затем в цикле для каждого ученика запрашивалась дополнительная информация, включая название класса. После переделки количество запросов сократилось с 61 до 3-х).

Думаю что как вывод можно сказать: «Оптимизация очень редко уменьшает сложность приложения. Старайтесь избегать усложнения, за счет оптимизации только того, что действительно надо оптимизировать» - цитата со слайда Джастина - instrumentation-for-php .

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

Прим. переводчика : Совершенно реальный диалог произошедший не так давно:
- Так у нас проблемы с производительностью, надо добавить кэширование, вертикальное партиционирование и NoSQL DB для логинов
- Парни - я тут посмотрел EXPLAIN - у Вас fullscan запрос на 4,000 строк, я попробовал создать индекс- все ускорилось в 26 раз.

Несколько замечаний к переводу

1. Термин cache stampeding - я перевел как убегание кэша (был соблазн перевести как «просрачивание», но это было бы неправильно). Если коротко, это ситуация, когда например определенный запрос выполняется достаточно долго и результаты этого запроса кэшируются, когда затем эти данные рано или поздно уходят из кэша, и одновременно рендерится 10 страниц на которых эти данные нужны, то в БД отправляется 10 медленных запрсов, вместо одного. Обычно с этим борются пере запрашивая данные до того как они будут выкинуты из кэша. см например
2. Хочу обратить внимание, что в статье не говорится что кэшировать данные не надо. Их надо кэшировать, но только после того как Вы попробуете несколько простых способов оптимизации запросов к БД. Иными словами начинать надо с простого.

Кэширование данных – это размещение информации в специальном месте. Позволяет получить быстрый доступ к сохраненным картинкам, веб-страницам. Одним из легких примеров для понимания является браузер, который сохраняет страницы посещенные пользователем для последующего быстрого доступа к ним.

Пространство, специально отделенное для этой области гораздо меньше, чем у хранилища информации.

Кэшированные данные – это информация, которая сохраняется на компьютере или телефоне (в том числе Андроид), после того, как была открыта и просмотрена . Это могут быть фотографии, музыка, игровые приложения и др.

К информации в буфере памяти игровых приложений относятся текстуры, видео, аудио, настройки игры. В процессе кэширования музыки, она сохраняется на накопитель устройства, чтобы в дальнейшем не потреблять трафик и воспроизводиться быстрее не зависимо от скорости Интернета.

При последующих входах на компьютер, где были просмотрены картинки, открыты те или иные страницы, их миниатюры сохраненные в специально отведенной для этого папке позволяют быстрее открыть те же самые фотографии или страницы в интернете.

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

Со временем буфер съедает большое количество памяти, поскольку данные постепенно накапливаются и чаще всего автоматически не очищаются. Поэтому рекомендуется иногда проводить ручную очистку.

На телефонах с операционной системой Андроид для того, чтобы произвести очистку необходимо зайти в настройки , найти пункт «Приложения », выбрать определенное приложение, чей размер занимает большой объем и запустить очистку.

На Самсунгах, начиная с операционной системы Android lollipop для этой цели предусмотрена специальная вкладка с названием «Кэшированные данные ». Эта функция самостоятельно собирает информацию о заполнении буфера памяти устройства, а пользователь сможет легко отыскать ее в «Настройках » — пройти до пункта «Память » и кликнуть по ней. На экране среди остальных пунктов будет расположена вкладка «Кэшированные данные».

Кроме данной функции на телефонах Samsung имеется еще одна дополнительная опция для работы с буфером памяти – это смарт менеджер . Он позволяет быстро почистить забивающуюся память.

Как используют кеш

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

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

Есть еще несколько сходных по смыслу понятий:


Стоит заметить, что чем больше хранилище, тем больше информации компьютер сможет обрабатывать.

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

Кэшированные данные на мобильном телефоне могут очень быстро заполнить встроенный накопитель смарфтона, поэтому желательно постоянно проводит очистку.

Можно ли очищать кэшированные данные

Информацию из буфера рекомендуется удалять . Так как она по мере заполнения влияет на скорость работы мобильных устройств. В следствие этого могут возникать частые ошибки и сбои тех или иных программ. Поэтому при появлении проблем в работе устройства в первую очередь очищайте кеш.

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

Кэширование — это один из способов оптимизации Web приложений. В любом приложении встречаются медленные операции (SQL запросы или запросы к внешним API), результаты которых можно сохранить на некоторое время. Это позволит выполнять меньше таких операций, а большинству пользователей показывать заранее сохраненные данные.

Наиболее популярная технология кеширования для Web приложений — Memcache .

Когда нужно кэшировать

Старайтесь избегать кэширования, пока в этом не будет прямой необходимости. Это простая техника, но это снижает гибкость приложения. Не делайте лишнюю работу заранее, но закладывайте возможность использования кэширования в будущем:

  • Используйте классы или функции, для работы с данными. Не используйте повторяющихся SQL выборок в основном приложении.
  • Используйте обертки для работы с внешними API.

Что кэшировать?

Кэшировать нужно данные, которые медленно генерируются и часто запрашиваются. На практике это обычно:

  • Результаты запросов к внешним сервисам (RSS, SOAP, REST и т.п.).
  • Результаты медленных выборок из базы данных.
  • Сгенерированные html блоки либо целые страницы.

Кэширование выборок из баз данных

Запросы к базе данных — наиболее распространенный пример. На основе Мemcache реализуется очень просто:

!$list = memcache_get("online_users") ) { $sql = "SELECT * FROM users WHERE last_visit > UNIX_TIMESTAMP() - 60*10"; $q = mysql_query($sql); while ($row = mysql_fetch_assoc($q)) $list = $row; memcache_set("online_users", $list, 60*60); } return $list; } $list = get_online_users(); ...

# Запрос на получение пользователей кэшируется на 1 час

Обновление данных

Если Вы кэшируете данные, которые могут обновляться, необходимо очищать кэш после каждого обновления:

memcache_delete("user" . $id); }

Кэширование списков

Допустим, Вы кэшируете данные каждого пользователя, как в примере, а также их списки (например, список online пользователей). При обновлении данных пользователя, Вы удаляете данные из кэша только для указанного пользователя. Но его данные могут также присутствовать в списке online пользователей, которые тоже лежат в кэше. Сбрасывать списки при каждом обновлении данных любого пользователя не эффективно. Поэтому обычно используют такой подход:

  1. Кэшируют списки, которые состоят только из ID пользователей.
  2. Для вывода списка отправляют отдельный запрос для получения данных каждого пользователя.

Реализация выглядит так:

id FROM users WHERE last_visit > UNIX_TIMESTAMP() - 60*10"; $q = mysql_query($sql); while ($row = mysql_fetch_assoc($q)) $list = $row["id"] ; memcache_set("online_users", $list, 60*60); } return $list; } $list = get_online_users(); foreach ($list as $id) { $user = get_user($id); ... }

# Получим список ID пользователей и для каждого из них получим актуальные данные

Для получения данных сразу нескольких объектов можно использовать Multiget .

Повторные запросы

Некоторые данные могут запрашиваться несколько раз в рамках одной страницы, например:

get_user($_SESSION["id"])["name"] )?>

... Email: get_user($_SESSION["id"])["email"] ?> ... get_user($_SESSION["id"])["nick"] ?>">Моя страница ...

Каждый вызов get_user() будет получать данные из кэша. Если Memcache стоит на отдельном сервере, это вызовет большой сетевой трафик и задержки.

Чтобы этого избежать, можно использовать дополнительный кэш внутри самого приложения:

global $app_cache; if ($app_cache["user" . $id]) return $app_cache["user" . $id]; if (!$data = memcache_get("user" . $id)) { $sql = "SELECT * FROM users WHERE id= " . intval($id); $q = mysql_query($sql); $data = mysql_fetch_assoc($q); memcache_set("user" . $id, $data, 60*60); $app_cache["user" . $id] = $data; } return $data; } function save_user($id, $data) { global $app_cache; mysql_query("UPDATE users SET ... WHERE id = " . intval($id)); memcache_delete("user" . $id); unset($app_cache["user" . $id]); }

В реальных приложениях, имеет смысл иметь обертку для Memcache с дополнительным кэшом:

inner_cache)) return $this->inner_cache[$key]; $data = memcache_get($this->resource, $key); $this->inner_cache[$key] = $data; return $data["value"]; } public static function set($key, $value, $ttl) { memcache_set($key, $value, $ttl); $this->inner_cache[$key] = $value; } public static function del($key) { memcache_delete($key); unset($this->inner_cache[$key]); } }

# $inner_cache хранит дополнительный кэш

Внимание. Использование этого подхода может приводить к утечкам памяти в случаях, когда идет работа с большим количеством данных в кэше. Например, в cron-задачах (допустим, мы перебираем всех пользователей для отправки рассылки). Тогда лучше добавить отключение внутреннего кэша:

public static $inner_cache_enabled = true; public static function get($key) { if (self::$inner_cache_enabled && array_key_exists($key, $this->inner_cache)) return $this->inner_cache[$key]; $data = memcache_get($this->resource, $key); $this->inner_cache[$key] = $data; return $data["value"]; } public static function set($key, $value, $ttl) { memcache_set($key, $value, $ttl); if (self::$inner_cache_enabled) $this->inner_cache[$key] = $value; } public static function del($key) { memcache_delete($key); unset($this->inner_cache[$key]); } } ... mem_cache::$inner_cache_enabled = false;

# Отключаем внутренний кэш

Подогревание

При обновлении особенно тяжелых данных следует использовать не сброс кэша, а прямое обновление данных в нем:

# операции по обновлению внешних ресурсов $data = file_get_contents("http://rss.com/rss"); memcache_set("rss", $data, 60*60); }

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

Время жизни (ttl)

ttl (время жизни) — это время, после которого, данные будут удалены из кэша. В Memcache устанавливается в секундах:

60*60 );

# Установка ttl на 1 час

Чаще всего ttl ставят от нескольких минут до нескольких дней. Не используйте значение 0 (бесконечное хранение), это может засорить память.

LRU

Любой кэш работает по принципу вытеснения если ему не хватает памяти. Т.е. если Memcache может использовать максимум 1G памяти, а Вы пытаетесь сохранить ключей на 2G, то половину из этих данных Memcache удалит. Для определения, какие именно ключи удалять, используется алгоритм LRU (Least Recently Used):

Memcache постарается удалить прежде всего те данные, которые запрашивались очень давно (т.е. менее популярные удалит, а более популярные оставит).

Кэширование очень медленных запросов

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

Чтобы этого избежать, необходимо использовать специальную методику дублирования .

Атомарные операции

Иногда в кэше хранятся счетчики (например, количество пользователей). При добавлении новых пользователей, вместо сброса счетчика и повторной выборки, можно просто увеличить значение кэша на единицу. Но сделать это через приложение нельзя, т.к. это приведет к потере данных от двух одновременно выполненных запросов:

Memcache поддерживает две атомарные операции увеличения и уменьшения чисел:

# Увеличит счетчик на 1, функция memcache_decrement() уменьшает счетчик

Самое важное

Кэширование в приложениях на основе Memcache — это очень сильный инструмент. Не забывайте, что Memcache не гарантирует Вам сохранности данных. Это значит, что нельзя рассчитывать на то, что сохраненные на 60 минут данные будут находиться в кэше именно 60 минут.

Компьютер, увы, не моментально выполняет команды, которые получает от людей. Для ускорения этого процесса применяется ряд хитростей, и почетное место среди них принадлежит кэшированию. Что это такое? Чем являются кэшированные данные? Как этот процесс собственно происходит? Что такое кэшированные данные в смартфоне "Самсунг", к примеру, и отличаются они чем-то от тех, что в компьютере? Давайте приступим к получению ответов на эти вопросы.

Так называют промежуточный буфер, который обеспечивает быстрый доступ к информации, вероятность запроса которой выше всего. Все данные содержатся в нём. Важным преимуществом является то, что извлечь всю необходимую информацию из кэша можно значительно быстрее, чем из исходного хранилища. Но существует значительный недостаток - размер. Кэшированные данные применяются в браузерах, жестких дисках, ЦПУ, веб-серверах, службах WINS и DNS. Основой структуры являются наборы записей. Каждая из них ассоциирована с определённым элементом или блоком данных, которые выступают копией того, что есть в основной памяти. Записи имеют идентификатор (тег), с помощью которого и определяется соответствие. Давайте посмотрим с немного другой точки зрения: что такое кэшированные данные в телефоне "Самсунг" или другого производителя? Отличаются ли они от тех, что создаются в компьютере? С принципиальной точки зрения - нет, разница исключительно в размере.

Процесс использования

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

Обновление данных

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

Политика записи

Во время модификации содержимого кэша обновляют данные и в основной памяти. Временная задержка, которая проходит между внесением информации, зависит от политики записи. Существует два основных типа:

  1. Немедленная запись. Каждое изменение синхронно заносится в основную память.
  2. Отложенная или обратная запись. Обновление данных проводится периодически или при запросе со стороны клиента. Чтобы отслеживать, было ли внесено изменение, используют признак с двумя состояниями: «грязный» или изменённый. В случае промаха может производиться два обращения, направленные основной памяти: первое используется, чтобы записать данные, что были изменены из кэша, а второе - чтобы прочитать необходимый элемент.

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

Современные вызовы

С увеличением частотности процессоров и повышением производительности оперативной памяти появилось новое проблемное место - ограниченность интерфейса Что из этого может подметить знающий человек? Кэш-память очень полезна, если частота в ОЗУ меньше чем в процессоре. Многие из них имеют свой собственный промежуточный буфер, чтобы уменьшить время доступа к оперативной памяти, которая действует медленнее, нежели регистры. В ЦП, которые поддерживают виртуальную адресацию, часто размещают небольшой, но очень быстрый буфер трансляций адресов. Но в других случаях кэш не очень полезен, а иногда только создаёт проблемы (но это обычно в компьютерах, которые подверглись модификации непрофессионалом). Кстати, говоря о том, что такое кэшированные данные в памяти смартфона, надо отметить, что из-за маленького размера устройства приходится создавать новые миниатюрные реализации кэша. Сейчас некоторые телефоны могут похвастаться параметрами, как у передовых компьютеров десять лет назад - а какая разница в их размере!

Синхронизация данных между разными буферами

  1. Инклюзивный. Кэш может вести себя как угодно.
  2. Эксклюзивный. Разрабатывался под каждый конкретный случай.
  3. Неэкслюзивный. Стандарт широкого распространения.

Уровни кэширования

Их количество обычно равняется трём или четырём. Чем больше уровень памяти, тем она объемнее и медленнее:

  1. L1 cache. Самый быстрый уровень кэша - первый. По сути, он часть процессора, поскольку расположен на одном кристалле и относится к функциональным блокам. Обычно делится на два вида: кэш инструкций и данных. Большинство современных процессоров без этого уровня не работают. Данный кэш функционирует на частоте процессора, поэтому обращение к нему может осуществлять каждый такт.
  2. L2 cache. Обычно располагается вместе с предыдущим. Является памятью раздельного пользования. Чтобы узнать его величину, необходимо весь объем, отданный под кэширование данных, поделить на количество ядер, которое есть в процессоре.
  3. L3 cache. Медленный, но самый большой зависимый кэш. Обычно больше 24 Мбайт. Используется, чтобы синхронизировать данные, которые поступают от различных кэшей второго уровня.
  4. L4 cache. Использование оправдано только для высокопроизводительных многопроцессорных майнфреймов и серверов. Его реализуют в качестве отдельной микросхемы. Если вы задаёте вопрос о том, что такое кэширование данных в смартфоне "Самсунг" и ищете в нём этот уровень - могу сказать, что лет на 5 точно поторопились.

Ассоциативность кэша

Это фундаментальная характеристика. Ассоциативность кэшированных данных необходима для отображения логической сегментации. Она, в свою очередь, нужна из-за того, что последовательный перебор всех имеющихся строк занимает десятки тактов и сводит на нёт все преимущества. Поэтому используется жесткая привязка ячеек ОЗУ к данным кэша, для сокращения времени поиска. Если сравнивать промежуточные буферы, у которых одинаковый объем, но разная ассоциативность, то тот, у кого она большая, будет работать менее быстро, но с значительной удельной эффективностью.

Заключение

Как видите, кэшированные данные при определённых условиях позволяет вашему компьютеру действовать более быстро. Но, увы, существует ещё довольно много аспектов, над которыми можно работать длительное время.

Похожие статьи