Robot
Складчик
- #1
[Balun.Courses] Оптимизация Go, как в BigTech
- Ссылка на картинку
Проблемы, которые решает курс:
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
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
Зарегистрируйтесь
, чтобы посмотреть скрытый авторский контент.