Когда я вижу «Я повышаю производительность системы в X раз быстрее, используя Y-кэш»

Кэш — это сложно

В компьютерных науках есть только две сложные вещи: аннулирование кэша и присвоение имен.

  • - Фил Карлтон

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

Давайте разберемся с подробностями интервью.

История №1 — Тайник в маленьком мире

Многие кандидаты не знают, что на уровне процессора есть кэш.

«Вы упомянули здесь, что исправлена ​​критическая проблема в многопоточном коде, не могли бы вы объяснить, что это было?».

«Конечно, я изменяю свою переменную, которая используется несколькими потоками». он ответил.

«Так каков тип значения этой переменной и почему вы ее используете»?

«Это целое число, чтобы гарантировать, что все потоки смогут получить обновленное значение переменной», — сказал он.

«Знаете ли вы, сколько стоит его использование? И не могли бы вы объяснить, почему это работает?».

«Я не уверен в этом, это просто работает. без нестабильности, несколько потоков видят разные значения», — сказал он.

На самом деле он не ошибся, я просто хочу углубиться в это дело, чтобы достичь предела (был на старшей должности C#).

«Знаете ли вы о кэше процессора? Не могли бы вы сказать мне, в чем разница между ключевыми словами volutable и lock?».

«Думаю, использование Летучих могло бы быть быстрее», — сказал он.

мы обсуждали другое.

не поймите меня неправильно, у меня есть ответ.

В этом посте мы просто обсудим больше.

Кэш уровня процессора

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

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

Давайте продолжим и рассмотрим проблему состояния гонки потоков.