Myvideo

Guest

Login

Оптимизируем код на Go в 10 раз. False sharing

Uploaded By: Myvideo
16 views
0
0 votes
0

Подход с Atomic 2:34 - того что мы будем использовать Atomic. Да, 2:37 - действительно. То есть, когда мы сейчас 2:38 - используем Atomic, мы по сути ускорили 2:41 - этот код практически в два раза. Вот уже неплохо. 571 nanoseconds Подход с шардированием 4:17 - немного удивит: получилось 530 наносекунд 4:20 - на операцию. Ну немного получилось Таймкоды: 00:00 - Введение 00:17 - Подход с RWMutex 01:40 - Подход с Mutex 02:10 - Подход с Atomic 03:39 - Подход с шардированием 04:36 - Подход с выравниванием при шардировании 05:42 - False sharing 08:13 - Заключение 00:00 Оптимизация счетчика • В видео рассматривается небольшой участок кода на языке программирования Go, который используется для инкрементирования счетчика в рамках библиотеки для мониторинга. • Соотношение чтения к записи составляет 1:10000, и задача - ускорить код. 02:28 Использование атомика • В качестве счетчика используется атомик, что позволяет ускорить код в два раза. • Проблема атомика - использование общего счетчика в каждом ядре, что приводит к расхождениям данных в кэшах. 03:56 Использование шардинга • Идея - разделить счетчик на десять шардов и использовать идентификатор грудины для обращения к определенному шарду. • В методе гет используется цикл для получения значения из шардов. 05:13 Использование выравнивания • Добавление смещения в структурку счетчика, которое равно 60 байтам, позволяет ускорить код в 20 раз. • Магия заключается во взаимодействии ядер с памятью: ядра читают не только один байт, но и всю кэш-линию, что приводит к фол-шерингу. • Выравнивание счетчика на 60 байт позволяет ядрам использовать независимые кэш-линии, что улучшает производительность.

Share with your friends

Link:

Embed:

Video Size:

Custom size:

x

Add to Playlist:

Favorites
My Playlist
Watch Later