2. • Окончил МатМех СПбГУ
• Сейчас работаю в компании Sidenis
• Увлекаюсь concurrency и всякими «кишочками»
• Нравится узнавать новое
• Неравнодушен к качественному коду
Обо мне
2
7. Почему они это делают?
Раньше инструкции исполнялись последовательно
http://www.slideshare.net/nithilgeorge/2010-1002-intro-to-microprocessors1
7
8. Почему они это делают?
Затем появился конвейер
http://www.slideshare.net/nithilgeorge/2010-1002-intro-to-microprocessors1
8
9. Почему они это делают?
Но инструкции всё равно исполнялись в порядке следования
http://www.slideshare.net/nithilgeorge/2010-1002-intro-to-microprocessors1
9
10. Почему они это делают?
Затем произошло массовое внедрение out-of-order execution
http://www.slideshare.net/nithilgeorge/2010-1002-intro-to-microprocessors1
10
11. • Доступ к памяти (долго)
• Инвалидация кэша (дорого)
• Производительность (IPC)
Почему они это делают?
https://software.intel.com/sites/default/files/m/d/4/1/d/8/286501_286501.gif
11
12. • Loop Read Hoisting - while (true)
• Read Elimination – кэширование в регистрах (иногда даже volatile
не спасает – в .NET Framework тоже бывали баги)
• Read Introduction – устранение локальной переменной (может
выстрелить в мире concurrency)
• И ещё много чего, что позволяет спецификация
Что могут сделать
компилятор/JIT/CPU?
12
17. • In computing, a memory model describes the interactions of
threads through memory and their shared use of the data.
(Wikipedia)
• ECMA-335 и ECMA-334
• Слабые и сильные модели памяти
• Спецификации на модель памяти Microsoft CLR не
существует!
Модель памяти
17
29. •У меня и без него работает!?
•На StackOverflow говорят, что не надо
•Это в Java надо писать volatile (при этом не
работало до 5)!?
Зачем здесь volatile?
29
33. • x86 и x86-64 имеют весьма строгую модель памяти
• Itanium
• Всё, что не оговорено стандартом, может изменяться в других
версиях .NET Framework и/или архитектурах процессоров
• СЮРПРИЗ! У нас есть ARM и Xamarin (будет демо)
• А также Windows 10 IoT Core на Raspberry Pi (но без демо)
Зачем здесь volatile!
33
34. • Демо про partially constructed object на ARM
Демо.
34
35. • Volatile – не магия, а всего лишь ключевое слово!
• Volatile – не зло, а всего лишь ключевое слово!
• Но оно имеет разную семантику в C/C++/C#/Java!
• В C# volatile – это про Acquire-Release семантику и только!
Некоторые считают volatile какой-то
магией или даже злом.
35
36. There can only be one!
Вариация на тему алгоритма Петерсона:
36
42. • The C# Memory Model in Theory and Practice
[https://msdn.microsoft.com/en-us/magazine/jj883956.aspx]
• ECMA-335 specification
[http://www.ecma-international.org/publications/files/ECMA-
ST/ECMA-335.pdf]
• ECMA-334 specification
[%VSINSTALLDIR%VC#Specifications1033CSharp Language
Specification.docx]
Список литературы:
42