Семь моделей конкуренции

Golubec

Platinum
Регистрация
13 Фев 2016
Сообщения
1.560
Реакции
72
АННОТАЦИЯ К КНИГЕ
Раскрываем тайны потоков!

С появлением микропроцессоров, обладающих большим числом ядер, понимание конкуренции и параллелизма при разработке программного обеспечения стало еще более важным, чем прежде. В книге вы познакомитесь с преимуществами функционального программирования с точки зрения конкуренции, узнаете, как применять акторы для разработки распределенного программного обеспечения, и исследуете приемы параллельной обработки огромных объемов информации на нескольких процессорах. Эта книга поможет вам приобрести новые навыки в разработке программ, благодаря чему вы будете готовы решать сложные задачи в ближайшие несколько лет.

Эту книгу должен прочитать каждый, кто разрабатывает программное обеспечение в нашу многоядерную эпоху!

Оглавление:
оглавление
Положительные отзывы к книге
«Семь моделей конкуренции за семь недель»
Предисловие
Благодарности
Вступление
О книге
Чем не является эта книга
Примеры кода
Примечание для пользователей IDE
Примечание для пользователей Windows
Ресурсы в Сети
Глава 1. Введение
Конкуренция или параллелизм?
Похожие, но разные
За рамками последовательного программирования
Параллельная архитектура
Параллелизм на уровне битов
Параллелизм на уровне инструкций
Параллелизм данных
Параллелизм на уровне задач
Конкуренция: за рамками множества ядер
Конкурентные программы для конкурентного мира
Распределенные программы для распределенного мира
Надежные программы для непредсказуемого мира
Простые программы в сложном мире
Семь моделей
Глава 2. Потоки выполнения и блокировки
Самое простое из того, что может работать
День 1: взаимоисключение и модели памяти
Создание потока
Наша первая блокировка
Загадочная память
Видимость памяти
Несколько блокировок
Опасности сторонних методов
В завершение первого дня
День 2: помимо встроенных блокировок
Прерываемое блокирование
Тайм-ауты
Блокирование методом перебора
Условные переменные
Атомарные переменные
В завершение второго дня
День 3: на плечах гигантов
Еще раз о создании потоков
Копирование при записи
Законченная программа
В завершение третьего дня
В завершение
Сильные стороны
Слабые стороны
Другие языки
Напоследок
Глава 3. Функциональное программирование
Если какие-то действия вредят вам, перестаньте выполнять их
День 1: программирование без изменяемого состояния
Опасности изменяемого состояния
Краткий экскурс в язык Clojure
Первая функциональная программа
Параллелизм без усилий
Функциональный подсчет слов
Лень – это благо
В завершение первого дня
День 2: функциональный параллелизм
По одной странице за раз
Разделение данных на пакеты для увеличения производительности
Редуценты (reducers)
Внутреннее устройство редуцентов
Разделяй и властвуй
Поддержка функции fold
Подсчет слов с помощью fold
В завершение второго дня
День 3: функциональная конкуренция
Та же структура, разный порядок вычислений
Ссылочная прозрачность
Потоки данных
Механизм future
Механизм promise
Функциональная веб-служба
В завершение третьего дня
В завершение
Сильные стороны
Слабые стороны
Другие языки
Напоследок
Глава 4. Путь Clojure – разделение идентичности и состояния
Лучшее из двух миров
День 1: атомы и сохранные структуры данных
Атомы
Многопоточная веб-служба с изменяемым состоянием
Сохранные структуры данных
Идентичность или состояние
Повторения
Валидаторы
Функции-наблюдатели
Гибридная веб-служба
В завершение первого дня
День 2: агенты и программная транзакционная память
Агенты
Журнал в памяти
Программная транзакционная память
Изменяемое разделяемое состояние
В завершение второго дня
День 3: погружение в глубину
Решение задачи о философах на основе STM
Решение задачи о философах без применения STM
Атомы или STM?
Собственная реализация конкуренции
В завершение третьего дня
В завершение
Сильные стороны
Слабые стороны
Другие языки
Напоследок
Глава 5. Акторы
Не объекты, а скорее ориентированные на объекты
День 1: сообщения и почтовые ящики
Наш первый актор
Почтовые ящики и очереди
Прием сообщений
Связывание процессов
Акторы с сохранением состояния
Сокрытие сообщений за фасадом API
Двунаправленное взаимодействие
Именование процессов
Отступление – функции первого порядка
Параллельная версия map()
В завершение первого дня
День 2: обработка ошибок и отказоустойчивость
Актор кэширования
Определение момента отказа
Слежение за работой процессов
Тайм-ауты
Ядро ошибки
И пусть падает!
В завершение второго дня
День 3: распределенные приложения
OTP
Узлы
Распределенный счетчик слов
В завершение третьего дня
В завершение
Сильные стороны
Слабые стороны
Другие языки
Напоследок
Глава 6. Взаимодействие последовательных процессов
Взаимодействия – это все
День 1: каналы и блоки go
Каналы
Блоки go
Операции с каналами
В завершение первого дня
День 2: множество каналов и ввод/вывод
Обслуживание множества каналов
Асинхронный опрос
Асинхронный ввод/вывод
В завершение второго дня
День 3: модель CSP на стороне клиента
Конкуренция – это образ жизни
Привет, ClojureScript
Обработка событий
Усмирение функций обратного вызова
Отправляемся в путь, чтобы увидеть Мастера
В завершение третьего дня
В завершение
Сильные стороны
Слабые стороны
Другие языки
Напоследок
Глава 7. Параллелизм данных
В недрах вашего ноутбука спрятан суперкомпьютер
День 1: программирование GPGPU
Обработка данных и параллелизм данных
Наша первая программа для OpenCL
Профилирование
Множество возвращаемых значений
Обработка ошибок
В завершение первого дня
День 2: многомерность и рабочие группы
Многомерные массивы рабочих элементов
Получение информации об устройстве
Модель платформы
Модель памяти
Параллельная свертка
Свертка с одной рабочей группой
В завершение второго дня
День 3: OpenCL и OpenGL – храните данные в GPU
Водная рябь
LWJGL
Отображение сетки в OpenGL
Доступ к буферу OpenGL из ядра OpenCL
Имитация ряби
В завершение третьего дня
В завершение
Сильные стороны
Слабые стороны
Другие языки
Напоследок
Глава 8. Лямбда-архитектура
Параллелизм позволяет обрабатывать гигантские объемы данных
День 1: MapReduce
Практические аспекты
Основы Hadoop
Подсчет слов с помощью Hadoop
Опробование на Amazon EMR
Обработка XML
В завершение первого дня
День 2: пакетный уровень
Проблемы с традиционными системами данных
Вечные истины
Лучшие данные – исходные данные
Авторы правок в Википедии
Завершение картины
В завершение второго дня
День 3: уровень ускорения
Архитектура уровня ускорения
Подсчет правок с помощью Storm
В завершение третьего дня
В завершение
Сильные стороны
Слабые стороны
Альтернативы
Напоследок
Глава 9. В заключение
Куда мы идем?
Будущее за неизменяемостью
Будущее за распределенными вычислениями
Темы, оставшиеся за бортом
Fork/Join и захват задачи
Потоки данных
Реактивное программирование
Функциональное реактивное программирование
Grid-вычисления
Пространства кортежей
Выбор за вами
Библиография
Предметный указатель

Продажник:

Скрытое содержимое могут видеть только пользователи группы: Премиум - Купить доступ


Скачать:

Скрытое содержимое могут видеть только пользователи группы: Премиум - Купить доступ
 
Сверху