о каких данных мы говорим?
В основном все данные .
Существует три места, где данные могут храниться (записываться, считываться):
(1) Регистрируется непосредственно на процессоре [несколько байтов].
(2) ОЗУ (с кэшем перед ним) [несколько гигабайт / террабайт]
(3) В / В (жесткие диски, твердотельные накопители, сетевые адаптеры) [неограниченно]
Поскольку вы не можете получить доступ к (1) и (3) напрямую, все ваши данные в основном попадают в ОЗУ.
Возможна ли потеря кеша в NodeJS и как ее получить?
Конечно. В оптимальном случае, если все ваши данные, с которыми вы работаете, кэшируются, и используется весь кэшированный объем, несколько килобайт сохраняются в L1, несколько сотен килобайт сохраняются в L2, а несколько MB хранятся в L3. Поэтому, если вы работаете с большим количеством данных, чем вмещается в эти кэши, пропадание кэша обязательно произойдет (тем не менее, они, скорее всего, произойдут).
После завершения JIT дружественный тест выполняется быстрее, но не всегда. Это ошибка кэша?
Хорошо, давайте посмотрим на стек, с которым вы работаете:
JavaScript <- you are here
/* gets run by */
V8 / NodeJS <- optimizations do happen
/* is written in */
C++ <- optimizations do happen, the other question is at this level
/* gets compiled to */
bytecode <- optimizations do happen
/* gets finally run on */
The Processor <- here the caches come into play
Другими словами: в отличие от C ++ вопрос, в NodeJS есть другой уровень оптимизации между ними. Этот уровень может вводить другие кэши, может изменять способ представления данных в памяти или выполнять другие оптимизации. Вы можете проанализировать байт-код , который выполняет V8, и оптимизировать для этого ... но в следующей версии V8 может появиться другая оптимизация, которая сделает ваши "оптимизации" устаревшими.
Но может ли прикладной программист получить промах кеша на платформе NodeJS?
Конечно. Где-то под капотом, очень вероятно, очень часто. Но ... Вы можете что-нибудь с этим сделать? Нет, не совсем. Команда V8 или разработчики компилятора C ++ могут, вы не можете, на самом деле.
Существуют ли какие-либо анти-паттерны, чтобы гарантировать отсутствие кеша и предотвратить схожие в рабочем коде?
Да, не пишите сумасшедший код.
Оценки взяты из блога Ника Крейвера , я настоятельно рекомендую прочитать это:)