EGround
Редактор
- Сообщения
- 24.319
- Реакции
- 127
Складчина: Оптимизация Go, как в BigTech [Balun Courses]
Проблемы, которые решает курс:
1. Пишу бизнес-логику и приложения на Go, но не могу разобраться perf-снимот или прочитать код в сторонней библиотеке.
2. Паникую, если нужно оптимизировать код, потому что не знаю, что происходит за пределами синтаксиса.
3. На работе пишу простые фичи, но хочется заниматься чем-то нетривиальным и низкоуровневым.
4. Не могу разобраться в исходном коде Go, потому что не понимаю, как устроен язык/архитектура компьютера.
5. Хочу устроиться в BigTech, но на собеседованиях валюсь на вопросах по внутреннему устройству GO и Computer Science.
За 5 недель на практике научишься выжимать все соки из Golang:
1. Изучишь computer science для работы в BigTech и научишься понимать, как исполняется код от языкового синтаксиса до машинных инструкций.
2. Узнаешь, как устроена операционка и на практике разберешь calling convention и научишься вызывать syscall’ы.
3. С нуля научишься использовать ассемблер в Go для понимания языковых оптимизаций.
4. Научишься оптимизировать код на примерах bigtech-компаний и низкоуровневого программирования.
5. Глубоко разберешь подкапотную работу low-level пакетов: unsafe и runtime, reflect и debug.
6. Научишься использовать профайлер для оптимизаций CPU, памяти и блокировок.
7. И за счет всех этих знаний сможешь повысить уровень ЗП и свою ценность в компании, как специалиста.
Спойлер: Программа курса ### Основы Computer Science. Часть 1
#### Урок №1 – Микроархитектура процессора
**Внутреннее устройство компьютера**
— Industry Standard Architecture (ISA)
— Модели разделения памяти
— Организация чипсетов
**Внутреннее устройство процессора**
— Архитектура CPU
— Многотактовые процессоры
— Конвейер процессора
— Предсказывание переходов
— Устройство регистров
— Типы команд
— SMT и hyperthreading
— Таксономия Флинна
— Пример процессора на Verilog
#### Урок №2 – Оперативная, кеш память
**Внутреннее устройство кеша процессора**
— Кеш линии
— Политики кэширования
— Когерентность кеша
— Политики инвалидизации кеша
— Уровни кеша
— Способы размещения данных на уровнях кеша
— Чтение и запись в кеш
**Внутреннее устройство оперативной памяти**
— Memory endian
— Page tables
— Hierarchical page tables
— Страничная адресация
— Трансляция адресов
— Shared memory
— Direct memory access
—
**Результат:**
— за пару часов получил(-а) основы Computer Science, которые спрашивают на собеседованиях
— умеешь ускорять код через понимание, как он исполняется "под капотом"
### Основы Computer Science. Часть 2
#### Урок №3 – Архитектура операционных систем
**Введение в операционные системы**
— Что такое операционная система и зачем она нужна?
— Архитектура операционных систем (monolitic, micro)
— ASMP, SMP
— User space
— Kernel space
— Примеры операционных систем xv6
**Прерывания и системные вызовы**
— fork(), vfork(), exec(), clone()
— Copy on write
— Синхронные, асинхронные прерывания
— User, kernel, interrupt stacks
— Golang syscalls examples
— Буферизация и дескрипторы
#### Урок №4 – Управления памяти в операционке
**Механизмы управления памятью**
— Memory ordering
— Barriers, out-of-order execution
— Memory reclaim
— Виртуальные и физические адреса
— Memory mapped files
— Swap file
— Translation lookaside buffer
— Линейное выравнивание памяти
— Фрагментация памяти, аллокаторы
— Пример buddy аллокатора в xv6
**Абстракции операционной системы**
— Процессы, потоки
— Process context
— Interrupt request
— Tasklets
— OOM Killer
— SLAB
— Pipe
—
**Результат:**
— за пару часов получаешь основы Computer Science, которые спрашивают на собеседованиях
— умеешь ускорять код через понимание, как он исполняется "под капотом"
**Домашнее задание:**
— написать программы, которые взаимодействуют с операционной системой через syscalls. Написать свои каналы в Go, используя syscall pipe.
—
### Неделя 3
### Ассемблер в GO и работа со стеком
#### Урок №5 – введение в ассемблер Go
**Введение в ассемблер Go**
— Типы инструкций
— Кроссплатформенность
— Flags register
— Сравнение инструкций
— Addressing modes
#### Урок №6 – инструкции работы со стеком
**Стек программы**
— Инструкции работы со стеком
— Red zone
— Guard pages
— Stack overflow
— Локальные переменные
— Соглашения вызова функций
— Стековый фрейм
—
**Результат:**
— понимаешь, как твоя программа транслируется в ассемблерный код
— умеешь писать собственные программы на ассемблере
**Домашнее задание:**
— написать свою программу на ассемблере Go
—
### Неделя 4
### Дополнительные фишки оптимизации, кодинг бенчмарков
#### Урок №7 – устройство памяти в Go, бенчмарки
**Устройство памяти в Go**
— Аллокатор Go
— Go арены, спаны
— Go scavenger, madvise calls
— Сравнение с другими языками программирования
— Сборка мусора, балласт
**Бенчмарки в Go**
— Что такое бенчмарки и зачем они нужны
— Как писать бенчмарки в Go
— Бенчмарки конкурентных программ
#### Урок №8 – оптимизации в Go
**Устройство Go**
— Escape analysis
— Устройство типов в Go, виртуальные вызовы
**Оптимизации в Go**
— Примеры базовых оптимизаций
— Работа с пакетом unsafe, работа с uintptr
— Bounds check elimination
— sync.Pool
— Copy and allocate optimizations
— Пакет reflect, законы рефлексии в Go
— Small-size объекты
—
**Результат:**
— понимаешь внутреннее устройство рантайма Go с точки зрения управления памятью
— умеешь работать с low-level пакетами и рефлексией Go
— на практике умеешь применять оптимизации в Go
**Домашнее задание:**
— используя рефлексию Go, написать свою собственную реализацию RPC
— С помощью unsafe пакета написать нетривиальные функции. Например, которые не делают лишние копии данных. Дополнительно написать бенчмарки
—
### Неделя 5
### Рантайм в Go и профилирование
#### Урок №9 – управление внутренним состоянием рантайма Go
**Управление внутренним состоянием рантайма Go**
— Пакет runtime, анализ внутреннего состояния приложения, профилирование
— Пакет debug, способы контролировать внутреннее состояние рантайма Go
— Проблемы фрагментации, сборки мусора, нехватки памяти в приложениях и их решения
**Использование продвинутых техник**
— Выбор аллокаторов
— CGO, примеры использования
— PGO
#### Урок №10 – профилирование в Go
**Профилирование в Go**
— Внутреннее устройство профилировщика Go
— Как работать с профилировщиком Go (CLI, Web)
— Типы профилировщиков
— Накладные расходы при профилировании
—
**Результат:**
— умеешь оптимизировать приложение, используя продвинутые пакеты Go, которые позволяют управлять внутренним состоянием рантайма
— умеешь профилировать приложение
**Домашнее задание:**
— написать свой микросервис, включив в него работу с CGO, сделать профилирование и применить PGO
Материал «Оптимизация Go, как в BigTech [Balun Courses]», возможно, скоро появится на EGROUND.
Воспользуйтесь поиском, может быть, он уже опубликован.