Linux: эффективная многопроцессорность. Используем Go

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Author(s): Олег Цилюрик

Language: Russian
Pages: 281

Предисловие
Предназначение и целевая аудитория
Код примеров и замеченные опечатки
Замечание о версиях
Чего нет в этой книге
Соглашения и выделения, принятые в тексте
Напоминание
Источники информации
Часть 1. Инструментарий языка Go
Предыстория Go
«Отцы-основатели» о целях и мотивации…
Применимость: беглый взгляд
Go, C, C++, Java, Python, Rust …
Управление памятью и истоки ненадёжности...
Источники информации
Разворачиваем экосистему Go
Создание среды
Стандартная инсталляция
Версии среды
Альтернативы
«Самая последняя» версия
Смена версий
Проверяем: простейшая программа
Простейшее приложение
Библиотеки статические и динамические
Компиляция или интерпретация
Выбор: GoLang или GCC ?
Инфраструктура GoLang
Команды go
Переменные окружение
Переменная окружения GOPATH
Переменная окружения GOTOOLDIR
Переменная окружения GOARCH и GOOS
Платформы, переносимость и кросс-компиляция
Стиль кодирования (автоформатирование — fmt)
Сборка приложений (build)
Сценарии на языке Go (run)
Загрузка проектов из сети (get)
Репозиторные системы
Установка проектов
Утилиты GoLang (tool)
Утилиты компиляции
Связь с кодом C (Cgo)
Сторонний и дополнительный инструментарий
Интерактивный отладчик Delve
Источники информации
Неформально о синтаксисе Go
Типы данных
Переменные
Повторные декларации и переприсвоения
Константы
Агрегаты данных
Массивы и срезы
Двухмерные массивы и срезы
Структуры
Таблицы (хэши)
Динамическое создание переменных
Конструкторы и составные литералы
Операции
Функции
Вариативные функции
Стек процедур завершения
Обобщённые функции
Функции высших порядков
Встроенные функции
Объектно ориентированное программирование
Методы
Множество методов
Встраивание и агрегирование
Функции как объекты
Интерфейсы
Именование интерфейсов
Контроль интерфейса
Обработка ошибочных ситуаций
Структура пакетов (библиотек) Go
Функция init
Импорт для использования побочных эффектов
Некоторые полезные и интересные стандартные пакеты
Пакет runtime
Форматированный ввод-вывод
Строки и пакет strings
Строчные литералы
Большие числа
Автоматизированное тестирование
Источники информации
Новости от последних версий...
Модули
Дженерики
Источники информации
Часть 2. Конкурентность и многопроцессорность
Процессоры в Linux
Процессоры, ядра и гипертриэдинг
Загадочная нумерация процессоров
Управление процессорами Linux
Аффинити маска
Как происходит диспетчирование в Linux
Приоритеты nice
Приоритеты реального времени
Источники информации
Параллелизм и многопроцессорность
Эволюция модели параллелизма
Параллельные процессы и fork
Потоки ядра и pthread_t POSIX
Потоки C++
Сопрограммы — модель Go
Параллелизм в Go
Сопрограммы — как это выглядит
Возврат значений функцией
Ретроспектива: сопрограммы в C++
Каналы
Функциональные замыкания в сопрограммах
Примитивы синхронизации
Конкурентность и параллельность
Источники информации
Масштабирование
Планирование активности сопрограмм
Испытательный стенд
Микрокомпьютеры (Single-Board Computers)
Рабочие десктопы
Серверы промышленного класса
Масштабирование в реальном мире
1-я попытка …
2-й подход к снаряду…
О числе потоков исполнения
Источники информации
Часть 3. Некоторые примеры и сравнения
Осваиваемся в синтаксисе Go
Утилита echo
Итерационное вычисление вещественного корня
Вычисление числа π
Вычисления неограниченной точности
Случайная последовательность и её моменты
Обсчёт параметров 2D выпуклых многоугольников
TCP клиент-сервер
Тривиальный WEB сервер
Порядок итераций для map: сюрприз
Источники информации
Структуры данных, типы и их методы
Массивы и срезы
Многомерные срезы и массивы
Функции с множественным возвратом
Строки, руны и UNICODE
Символы, байты и руны
Изменение содержимого строк
Палиндромы
Регулярные выражения
Источники информации
Элементы функционального программирования
Функциональные замыкания
Карринг
Рекурсия
Рекурсия с кэшированием
Чистые функции
Источники информации
Скоростные и другие сравнения языков
Алгоритмические задачи для сравнения
Некоторые известные алгоритмы
Числа Фибоначчи
Пузырьковая сортировка
Ханойская башня
Решето Эратосфена
Многопроцессорные параллельные вычисления
Скорость активации параллельных ветвей
Гонки
Защита критических данных
Многопроцессорный брутфорс
Каналы в сопрограммах
Таймеры
Тикеры
Когда не нужно злоупотреблять многопроцессорностью
Источники информации
Заключение
Об авторе