Оптимизация Go, как в BigTech [Balun Courses]

Джокер

Администратор
Регистрация
1 Янв 2015
Сообщения
146.301
Реакции
78.236
**Складчина: Оптимизация Go, как в BigTech [Balun Courses]**

Курс поможет решить следующие проблемы:

1. Затруднения с perf-снимот или чтением кода в сторонних библиотеках.
2. Неопределенность в оптимизации кода из-за недостатка знаний за пределами синтаксиса.
3. Желание заниматься нетривиальными и низкоуровневыми задачами.
4. Непонимание исходного кода Go из-за отсутствия понимания языка/архитектуры компьютера.
5. Подготовка к собеседованиям в BigTech по внутреннему устройству Go и Computer Science.

На протяжении 5 недель курс поможет освоить следующее:

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

**Результат:**
- Освоение основ Computer Science, востребованных на собеседованиях.
- Умение ускорять код через понимание внутренних процессов исполнения.

**Домашнее задание:**
- Написать программы, взаимодействующие с операционной системой через syscalls. Создать свои каналы в Go, используя syscall pipe.

### **Неделя 3**

#### **Урок №5 – Введение в ассемблер Go**

**Введение в ассемблер Go:**
- Типы инструкций
- Кроссплатформенность
- Flags register
- Addressing modes

#### **Урок №6 – Инструкции работы со стеком**

**Стек программы:**
- Инструкции работы со стеком
- Red zone
- Guard pages
- Stack overflow
- Локальные переменные
- Соглашения вызова функций
- Стековый фрейм

**Результат:**
- Понимание трансляции программы в ассемблерный код.
- Навык написания программ на ассемблере.

**Домашнее задание:**
- Написать свою программу на ассемблере Go.

### **Неделя 4**

#### **Урок №7 – Устройство памяти в Go, бенчмарки**

Устройство памяти в Go:
- Аллокатор Go
- Go арены, спаны
- Сравнение с другими языками
- Сборка мусора

Бенчмарки в Go:
- Цель и практика создания бенчмарков
- Проверка производительности конкурентных программ

#### **Урок №8 – Оптимизации в Go**

Устройство Go:
- Escape analysis
- Устройство типов в Go
- Оптимизации и их практическое применение

**Результат:**
- Понимание устройства рантайма Go и умение работать с low-level пакетами и рефлексией Go.
- Навык применения оптимизаций в Go.

**Домашнее задание:**
- Написание собственной реализации RPC с использованием рефлексии Go.
- Создание нетривиальных функций через unsafe пакет, с написанием бенчмарков.

### **Неделя 5**

#### **Урок №9 – Управление внутренним состоянием рантайма Go**

Управление внутренним состоянием рантайма Go:
- Пакет runtime для анализа и профилирования приложений
- Продвинутые техники управления состоянием рантайма Go

#### **Урок №10 – Профилирование в Go**

Профилирование в Go:
- Работа с профилировщиком Go
- Типы профилировщиков и их применение

**Результат:**
- Навык оптимизации приложений с использованием продвинутых пакетов Go для управления внутренним состоянием рантайма.
- Умение профилировать приложения.

**Домашнее задание:**
- Создание микросервиса с работой CGO, профилированием и применением PGO.

Данный курс предоставляет глубокие знания по оптимизации Go, призванные повысить вашу квалификацию и ценность в IT-компаниях.