/Кэширование

Кэширование

кэширование данныхЕсли вы когда-нибудь покупали компьютер, вы должны были слышать слово «кэш». Современные компьютеры имеют кэш L1 и L2, некоторые имеют также L3. Возможно, вы также слышали дружеские советы вроде: «Не покупай Celeron, он не имеет кэша!»
На самом деле, кэширование – очень важный процесс. Существует кэш памяти, аппаратный и программный кэш диска, кэш страниц и многое другое. Даже виртуальная память имеет свой принцип кэширования. В этой статье мы рассмотрим кэширование, чтобы понять, почему это так важно.
Простой пример: до кэша
Кэширование – технология, основанная на подсистеме памяти компьютера. Основная цель кэширования – ускорение работы компьютера при сохранении его невысокой стоимости. Кэширование позволяет компьютерам выполнять задачи быстрее.
Для того чтобы понять основную идею системы кэширования, давайте начнем с суперпростого примера, который использует образ библиотекаря для демонстрации концепции кэширования. Давайте представим библиотекаря, сидящего за столом. Для простоты предположим, что вы не можете получить книги самостоятельно – вам нужно попросить библиотекаря дать вам книгу, которую вы хотите прочесть. Он выбирает её из стеллажей в архивах (библиотека конгресса в Вашингтоне, округ Колумбия, устроена таким образом). Давайте представим, что у библиотекаря нет кэш-памяти.
Прибывает первый клиент. Он просит книгу «Моби Дик». Библиотекарь идёт в архив, берёт книгу, возвращается к прилавку и дает книгу клиенту. Позже, клиент возвращается, чтобы вернуть книгу. Библиотекарь берет книгу и возвращает её в архив. Затем он возвращается на своё место и ждет другого клиента. Скажем, следующий клиент также просит «Моби Дика». Библиотекарь возвращается в архив, чтобы взять книгу, и даёт её клиенту. Согласно этой модели, библиотекарь должен сделать полное путешествие туда и обратно, чтобы принести все книги — даже очень популярные из них, которые запрашиваются чаще. Есть ли способ улучшить производительность библиотекаря?
Да, есть способ — мы можем добавить библиотекарю кэш.
Простой пример: после кэша
Давайте дадим библиотекарю рюкзак, в котором он сможет хранить 10 книг (выражаясь компьютерными терминами, это означает, что у него будет 10-книжный кэш). В этот рюкзак он поместит книги, которые клиенты буду возвращать ему, максимум до 10 штук. Давайте изучим предыдущий пример с поправкой на то, что у библиотекаря теперь есть этот рюкзак.
День начинается. Рюкзак библиотекаря пуст. Наш первый клиент приходит и просит «Моби Дика». Никакого волшебства — библиотекарь должен пойти в архив, чтобы получить книгу. Он отдает ее клиенту. Позже, клиент возвращается и отдает книгу обратно библиотекарю. Вместо возвращения в архив, чтобы вернуть книгу, библиотекарь кладёт книгу в рюкзак (проверяя сначала, не полон ли он). Другой клиент приходит и просит «Моби Дика». Прежде чем пойти в архив, библиотекарь проверяет, есть ли эта книга в его рюкзаке. Он находит её! Все, что он должен сделать, это взять книгу из рюкзака и отдать её клиенту. Клиент обслуживается более эффективно, так как не нужно каждый раз ходить в архив.
Что делать, если клиент попросил книгу, которой нет в рюкзаке? В этом случае библиотекарь менее эффективен с кэшем, чем без него, потому что ему приходиться потратить время на поиск книги в рюкзаке, а только затем отправляться в библиотеку. Одной из проблем кэш-дизайна является сведение к минимуму времени поиска и современное оборудование сокращает это время практически до нуля. Даже в нашем простом примере задержка времени (время ожидания) настолько мала по сравнению со временем похода в архив, что она не имеет значения. Кэш мал (10 книг), и проверить его можно очень быстро.
На этом примере вы можете увидеть несколько важных фактов о кэшировании:
• Технология кэширования заключается в ускорении больших медленных объёмов памяти за счёт работы с маленькими и быстрыми объёмами памяти.
• При использовании кэша, вы должны проверить его, чтобы увидеть, находится ли элемент там.
• Если он есть, память называется кэшированной. Если нет, компьютеру необходимо время на то, чтобы перенести фрагмент данных из медленной памяти в кэш.
• Кэш всегда небольшого размера, значительно меньшего, чем большая область хранения.
• Может быть несколько уровней кэша. В нашем примере с библиотекарем самым маленьким и быстрым является рюкзак библиотекаря, а архив представляет собой основную память. Это одноуровневый кэш. Там может быть ещё один уровень – полка, содержащая, например, 100 книг. Библиотекарь может проверить сначала рюкзак, а потом полку – это будет двухуровневый кэш.