Когато видя „Повишавам производителността на системата X пъти по-бързо, като използвам Y кеш“
Кешът е труден
Има само две трудни неща в компютърните науки: обезсилване на кеша и наименуване на неща.
- - Фил Карлтън
Когато работим с кеш, това носи производителност, но носи и проблеми. най-големият проблем е - последователността на данните.
Нека го прегледаме с подробности за интервюто.
История №1 — кеш в малкия свят
Много кандидати не знаят, че има кеш на ниво процесор.
„Тук споменахте, че сте коригирали критичен проблем в многопоточния код, бихте ли обяснили какво е това?“
„Разбира се, променям променливата си, която се споделя между множество нишки.“ той отговори.
„И така, какъв е типът стойност на този volatile и защо го използвате“?
„Това е цяло число, за да сме сигурни, че всички нишки могат да получат актуализираната стойност на променливата“, каза той.
„Знаете ли цената за използването му? И моля, бихте ли обяснили защо работи?”.
„Не съм сигурен в това, просто работи. без непостоянни, множество нишки, виждащи различни стойности“, каза той.
Всъщност той не сгреши, просто искам да разровя повече, за да докосна границата (беше старша роля на C#).
„Знаете ли за кеша на процесора? И бихте ли ми казали каква е разликата между променливи и заключващи ключови думи?“
„Предполагам, че използването на volatile може да бъде по-бързо“, каза той.
обсъдихме нещо друго.
…
не ме разбирайте погрешно, добре съм с отговора.
В тази публикация просто ще обсъдим повече.
Кеш на ниво CPU
Когато работим в многонишков код, за да гарантираме безопасност на нишката (автоматична работа), използваме ключалки или синхронизирани ключови думи. под капака, той използва семафор или мютекс.
В случай, че не сте запознати със семафора, можете да проверите тази публикация и в случай, че искате да имате обща представа за разликата между нишки и обработка или съпрограмма, можете да проверите тук.
Нека да продължим и да видим проблем с условието за състезание на нишки.