На этом открытом уроке мы разберем многопоточность от «А» до «Я» — от устройства транзисторов и законов физики до практического применения атомиков в Go для написания высокопроизводительного кода.
В этом уроке:
В итоге у тебя будет фундаментальное понимание того, как на самом деле исполняется конкурентный код: ты узнаешь, за что мы платим при распараллеливании задач и как использовать ресурсы процессора максимально эффективно, избегая типичных ловушек абстракций
В этом уроке:
- История и эволюция: путь от пакетной обработки задач до современных многоядерных систем и вытесняющей многозадачности.
- Железо под капотом: почему одно ядро больше не растет в частоте, как работают протоколы когерентности кэша (MESI) и зачем процессору нужны многопоточные инструкции.
- Атомики в Go: глубокий разбор пакета sync/atomic, реализация собственных атомиков на ассемблере и понимание операции Compare-and-Swap (CAS).
- Проблемы синхронизации: что такое Data Race на уровне кэш-линий процессора и как эвристики компилятора могут замедлить ваш код в 4 раза.
- Параллелизм на практике: пишем и бенчмаркаем параллельное сложение матриц, разбираем закон Амдала и ищем "золотую середину" в количестве потоков.
- Текущие абстракции: как ложные разделения (False Sharing) и кэш-контеншн влияют на реальные бизнес-приложения и как от этого защититься с помощью падинга.
В итоге у тебя будет фундаментальное понимание того, как на самом деле исполняется конкурентный код: ты узнаешь, за что мы платим при распараллеливании задач и как использовать ресурсы процессора максимально эффективно, избегая типичных ловушек абстракций