«ARM переставляет обращения к памяти, а x86 нет» — формула, которая неверна с обеих сторон
Если вы пишете многопоточный код под Android или iOS, то наверняка слышали объяснение: у ARM слабая модель памяти, процессор переставляет чтения и записи как хочет, поэтому нужны барьеры. У x86 модель сильная, порядок соблюдается, барьеры почти не нужны.
Фабиан Гизен показывает, что обе половины формулы неточны. За исключением совсем маленьких ядер без кэша, процессоры вообще не соблюдают собственную модель памяти на каждом обращении. Они обещают вести себя так, как если бы соблюдали. Реализуется это оптимистично: процессор считает, что данные никто параллельно не менял, выполняет обращения в удобном порядке и держит рядом ровно столько метаданных, чтобы задним числом заметить нарушение. Заметил — инструкция не фиксируется, состояние откатывается, дальше повтор.
Так устроены все архитектуры. Разница в том, сколько метаданных нужно на каждую инструкцию в полёте и какие порядки разрешено фиксировать при конфликте. Часто цитируемые 7% платы за аппаратный TSO на Apple Silicon Гизен отдельно оговаривает: это цена конкретной реализации, где TSO включается ради Rosetta.
В нашем канале «Сохранёнки программиста» разобрали подробнее.
1
1August 30, 2026 809 4