Когато видя „Повишавам производителността на системата X пъти по-бързо, като използвам Y кеш“

Кешът е труден

Има само две трудни неща в компютърните науки: обезсилване на кеша и наименуване на неща.

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

Когато работим с кеш, това носи производителност, но носи и проблеми. най-големият проблем е - последователността на данните.

Нека го прегледаме с подробности за интервюто.

История №1 — кеш в малкия свят

Много кандидати не знаят, че има кеш на ниво процесор.

„Тук споменахте, че сте коригирали критичен проблем в многопоточния код, бихте ли обяснили какво е това?“

„Разбира се, променям променливата си, която се споделя между множество нишки.“ той отговори.

„И така, какъв е типът стойност на този volatile и защо го използвате“?

„Това е цяло число, за да сме сигурни, че всички нишки могат да получат актуализираната стойност на променливата“, каза той.

„Знаете ли цената за използването му? И моля, бихте ли обяснили защо работи?”.

„Не съм сигурен в това, просто работи. без непостоянни, множество нишки, виждащи различни стойности“, каза той.

Всъщност той не сгреши, просто искам да разровя повече, за да докосна границата (беше старша роля на C#).

„Знаете ли за кеша на процесора? И бихте ли ми казали каква е разликата между променливи и заключващи ключови думи?“

„Предполагам, че използването на volatile може да бъде по-бързо“, каза той.

обсъдихме нещо друго.

не ме разбирайте погрешно, добре съм с отговора.

В тази публикация просто ще обсъдим повече.

Кеш на ниво CPU

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

В случай, че не сте запознати със семафора, можете да проверите тази публикация и в случай, че искате да имате обща представа за разликата между нишки и обработка или съпрограмма, можете да проверите тук.

Нека да продължим и да видим проблем с условието за състезание на нишки.