Когда я вижу «Я повышаю производительность системы в X раз быстрее, используя Y-кэш»
Кэш — это сложно
В компьютерных науках есть только две сложные вещи: аннулирование кэша и присвоение имен.
- - Фил Карлтон
Когда мы работаем с кешем, это повышает производительность, но также приносит и проблемы. Самая большая проблема — согласованность данных.
Давайте разберемся с подробностями интервью.
История №1 — Тайник в маленьком мире
Многие кандидаты не знают, что на уровне процессора есть кэш.
«Вы упомянули здесь, что исправлена критическая проблема в многопоточном коде, не могли бы вы объяснить, что это было?».
«Конечно, я изменяю свою переменную, которая используется несколькими потоками». он ответил.
«Так каков тип значения этой переменной и почему вы ее используете»?
«Это целое число, чтобы гарантировать, что все потоки смогут получить обновленное значение переменной», — сказал он.
«Знаете ли вы, сколько стоит его использование? И не могли бы вы объяснить, почему это работает?».
«Я не уверен в этом, это просто работает. без нестабильности, несколько потоков видят разные значения», — сказал он.
На самом деле он не ошибся, я просто хочу углубиться в это дело, чтобы достичь предела (был на старшей должности C#).
«Знаете ли вы о кэше процессора? Не могли бы вы сказать мне, в чем разница между ключевыми словами volutable и lock?».
«Думаю, использование Летучих могло бы быть быстрее», — сказал он.
мы обсуждали другое.
…
не поймите меня неправильно, у меня есть ответ.
В этом посте мы просто обсудим больше.
Кэш уровня процессора
Когда мы работаем в многопоточном коде, для обеспечения потокобезопасности (автоматической работы) мы используем блокировки или синхронизированные ключевые слова. под капотом он использует семафор или мьютекс.
Если вы не знакомы с семафором, вы можете проверить этот пост, а если вы хотите получить общее представление о разнице между потоками и обработкой или сопрограммой, вы можете проверить здесь.
Давайте продолжим и рассмотрим проблему состояния гонки потоков.