Семь моделей конкуренции и параллелизма за семь недель. Раскрываем тайны потоков
Покупка
Издательство:
ДМК Пресс
Автор:
Батчер Пол
Перевод:
Киселев Артём Николаевич
Год издания: 2023
Кол-во страниц: 362
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Дополнительное образование
ISBN: 978-5-89818-332-5
Артикул: 816355.01.99
С появлением микропроцессоров, обладающих большим числом ядер, понимание конкуренции и параллелизма при разработке программного обеспечения стало еще более важным, чем прежде. В книге вы познакомитесь с преимуществами функционального программирования с точки зрения конкуренции, узнаете, как применять акторы для разработки распределенного программного обеспечения, и исследуете приемы параллельной обработки огромных объемов информации на нескольких процессорах. Эта книга поможет вам приобрести новые навыки в разработке программ, благодаря чему вы будете готовы решать сложные задачи в ближайшие несколько лет.
- Полная коллекция по информатике и вычислительной технике
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Локальные компьютерные сети. Программное обеспечение локальных сетей. ОС
- Системное и сетевое администрирование
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Семь моделей конкуренции и параллелизма за Семь недель РаскРываем тайны потоков автор серии: пол Батчер редактор-консультант: Жаклин картер
When Threads Unravel Paul Butcher Seven Concurrency Models in Seven Weeks Dallas, Texas • Raleigh, NoRTh CaRoliNa
Москва, 2023 Раскрываем тайны потоков Пол Батчер Семь моделей конкуренции и параллелизма за семь недель 2-е издание, электронное
УДК 004.42 ББК 32.973 Б28 Б28 Батчер, Пол. Семь моделей конкуренции и параллелизма за семь недель. Раскрываем тайны потоков / П. Батчер ; пер. с англ. А. Н. Киселева. — 2-е изд., эл. — 1 файл pdf : 362 с. — Москва : ДМК Пресс, 2023. — (The Pragmatic Programmers). — Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". — Текст : электронный. ISBN 978-5-89818-332-5 С появлением микропроцессоров, обладающих большим числом ядер, понимание конкуренции и параллелизма при разработке программного обеспечения стало еще более важным, чем прежде. В книге вы познакомитесь с преимуществами функционального программирования с точки зрения конкуренции, узнаете, как применять акторы для разработки распределенного программного обеспечения, и исследуете приемы параллельной обработки огромных объемов информации на нескольких процессорах. Эта книга поможет вам приобрести новые навыки в разработке программ, благодаря чему вы будете готовы решать сложные задачи в ближайшие несколько лет. УДК 004.42 ББК 32.973 Электронное издание на основе печатного издания: Семь моделей конкуренции и параллелизма за семь недель. Раскрываем тайны потоков / П. Батчер ; пер. с англ. А. Н. Киселева. — Москва : ДМК Пресс, 2015. — 360 с. — (The Pragmatic Programmers). — ISBN 978-5-97060-244-7. — Текст : непосредственный. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации. ISBN 978-5-89818-332-5 © 2014 The Pragmatic Programmers, LLC. © Оформление, перевод на русский язык ДМК Пресс, 2015
Положительные отзывы к книге «Семь моделей конкуренции и параллелизма за семь недель» Уже не одно десятилетие профессиональные программисты реализуют параллельное выполнение кода с применением потоков и блокировок. Но эта модель – лишь одна из многих, что ярко демонстрирует книга «Семь моделей конкуренции и параллелизма за семь недель». Если вы хотите добиться успеха в мире, где основные языки программирования постепенно обретают поддержку акторов, CSP1, параллелизма данных, функционального программирования и заимствуют унифицированную модель последовательностей из языка Clojure, обязательно прочитайте эту книгу. ➤ Стюарт Хэллоуэй (Stuart Halloway) Сооснователь, Cognitect С появлением микропроцессоров, обладающих большим числом ядер, понимание конкуренции стало еще более важным, чем прежде. Вы познакомитесь с преимуществами функционального программирования с точки зрения конкуренции, узнаете, как применять акторы для разработки распределенного программного обеспечения, и исследуете приемы параллельной обработки огромных объемов информации на нескольких процессорах. Эта книга поможет вам приобрести новые навыки в разработке программ, благодаря чему вы будете готовы решать сложные задачи в ближайшие несколько лет. ➤ Хосе Валим (José Valim) Сооснователь Plataformatec В книге «Семь моделей конкуренции и параллелизма за семь недель», которая является поучительным обзором различных приемов параллельного/конкурентного выполнения, автору удалось найти баланс между описанием скучной теории и живыми экспериментами. ➤ Фредерик Чанг (Frederick Cheung) Технический директор, Dressipi Мир постоянно изменяется, и каждый действующий программист должен изучать приемы конкурентного программирования. Теперь, ког 1 Communicating sequential processes – взаимодействующие последовательные процессы. – Прим. перев.
да меня будут спрашивать: «Как сделать это?», – я смогу предложить прочитать эту книгу. Я многое узнал из нее и с радостью могу порекомендовать ее. ➤ Эндрю Хейли (Andrew Haley) Ведущий программист на Java, Red Hat По мере того, как закон Адмала2 начинает преобладать над законом Мура3, происходит переход от объектно-ориентированного к конкурентно-ориентированному программированию. Вследствие этого данная книга появилась как нельзя кстати. Пол проделал фантастическую работу, описав наиболее важные модели конкуренции и дав читателю обширный набор инструментов, из которого он сможет выбирать наиболее подходящие для его потребностей. Эту книгу должен прочитать каждый, кто разрабатывает программное обеспечение в нашу многоядерную эпоху. ➤ Франческо Цезарини (Francesco Cesarini) Основатель и технический директор Erlang Solutions В своей книге Пол дает превосходное введение в тернистую тему конкуренции и параллелизма, ясно и доходчиво описывая различные подходы. ➤ Шон Эллис (Sean Ellis) Архитектор GPU, ARM Просто о сложном. Я бы с удовольствием прослушал университетский курс по этой теме, взяв в качестве руководства «Семь моделей конкуренции и параллелизма за семь недель». ➤ Карлос Сесса (Carlos Sessa) Разработчик для Android, Groupon Пол Батчер (Paul Butcher) взял проблему, которая бросает в дрожь многих разработчиков, и наглядно продемонстрировал целую серию парадигм программирования, которые с успехом можно использовать для реализации конкуренции в программном обеспечении. ➤ Пайди Крид (Páidí Creed) Программист, SwiftKey Имея опыт сотрудничества с Полом, могу рекомендовать его как опытного эксперта в области архитектуры языков программирования. Эта книга является ясным описанием темы, часто недооцененной, но жизненно важной для разработки программного обеспечения. ➤ Бен Медлок (Ben Medlock) Сооснователь и технический директор, SwiftKey 2 https://ru.wikipedia.org/wiki/Закон_Адмала – Прим. перев. 3 https://ru.wikipedia.org/wiki/Закон_Мура – Прим. перев. Положительные отзывы к книге …
оглавление положительные отзывы к книге «семь моделей конкуренции и параллелизма за семь недель» ...........5 предисловие ................................................... 13 Благодарности ................................................. 15 вступление ..................................................... 17 О книге ...........................................................................................17 Чем не является эта книга...............................................................18 Примеры кода ................................................................................18 Примечание для пользователей IDE................................................19 Примечание для пользователей Windows ........................................19 Ресурсы в Сети ...............................................................................19 Глава 1. введение ............................................. 21 Конкуренция или параллелизм? .............................................. 21 Похожие, но разные ........................................................................21 За рамками последовательного программирования .......................23 Параллельная архитектура ...................................................... 23 Параллелизм на уровне битов ........................................................24 Параллелизм на уровне инструкций ...............................................24 Параллелизм данных ......................................................................24 Параллелизм на уровне задач ........................................................25 Конкуренция: за рамками множества ядер .............................. 26 Конкурентные программы для конкурентного мира ........................26 Распределенные программы для распределенного мира ...............27 Надежные программы для непредсказуемого мира ........................27 Простые программы в сложном мире .............................................28 Семь моделей ......................................................................... 28 Глава 2. потоки выполнения и блокировки ............ 31 Самое простое из того, что может работать............................. 31 День 1: взаимоисключение и модели памяти ........................... 32 Создание потока ............................................................................33 Наша первая блокировка ................................................................34 Загадочная память .........................................................................37
Оглавление Видимость памяти ..........................................................................38 Несколько блокировок ....................................................................39 Опасности сторонних методов .......................................................43 В завершение первого дня .............................................................44 День 2: помимо встроенных блокировок .................................. 46 Прерываемое блокирование ..........................................................47 Тайм-ауты .......................................................................................49 Блокирование методом перебора ..................................................51 Условные переменные ....................................................................54 Атомарные переменные .................................................................57 В завершение второго дня ..............................................................58 День 3: на плечах гигантов ....................................................... 60 Еще раз о создании потоков ...........................................................61 Копирование при записи ................................................................62 Законченная программа .................................................................64 В завершение третьего дня ............................................................74 В завершение .......................................................................... 75 Сильные стороны ...........................................................................75 Слабые стороны .............................................................................76 Другие языки ..................................................................................78 Напоследок ....................................................................................79 Глава 3. Функциональное программирование ........ 80 Если какие-то действия вредят вам, перестаньте выполнять их ........................................................................... 80 День 1: программирование без изменяемого состояния ......... 81 Опасности изменяемого состояния ................................................81 Краткий экскурс в язык Clojure ........................................................84 Первая функциональная программа ...............................................86 Параллелизм без усилий ................................................................87 Функциональный подсчет слов .......................................................89 Лень – это благо .............................................................................93 В завершение первого дня .............................................................94 День 2: функциональный параллелизм .................................... 95 По одной странице за раз ...............................................................95 Разделение данных на пакеты для увеличения производительности ......................................................................98 Редуценты (reducers) ......................................................................99 Внутреннее устройство редуцентов ..............................................100 Разделяй и властвуй .....................................................................103 Поддержка функции fold ...............................................................104 Подсчет слов с помощью fold ........................................................105 В завершение второго дня ............................................................107 День 3: функциональная конкуренция .................................... 108 Та же структура, разный порядок вычислений ...............................108
Оглавление Ссылочная прозрачность ..............................................................109 Потоки данных ..............................................................................110 Механизм future ............................................................................111 Механизм promise ........................................................................112 Функциональная веб-служба ........................................................113 В завершение третьего дня ..........................................................121 В завершение ........................................................................ 122 Сильные стороны .........................................................................124 Слабые стороны ...........................................................................124 Другие языки ................................................................................124 Напоследок ..................................................................................125 Глава 4. путь Clojure – разделение идентичности и состояния ................................................... 126 Лучшее из двух миров ........................................................... 126 День 1: атомы и сохранные структуры данных ....................... 127 Атомы ...........................................................................................127 Многопоточная веб-служба с изменяемым состоянием ...............129 Сохранные структуры данных .......................................................130 Идентичность или состояние ........................................................134 Повторения ..................................................................................134 Валидаторы ..................................................................................135 Функции-наблюдатели .................................................................135 Гибридная веб-служба ..................................................................136 В завершение первого дня ...........................................................140 День 2: агенты и программная транзакционная память ......... 141 Агенты ..........................................................................................141 Журнал в памяти ...........................................................................145 Программная транзакционная память ..........................................146 Изменяемое разделяемое состояние ...........................................151 В завершение второго дня ............................................................151 День 3: погружение в глубину ................................................ 152 Решение задачи о философах на основе STM ...............................153 Решение задачи о философах без применения STM .....................155 Атомы или STM? ...........................................................................157 Собственная реализация конкуренции .........................................158 В завершение третьего дня ..........................................................160 В завершение ........................................................................ 161 Сильные стороны .........................................................................161 Слабые стороны ...........................................................................162 Другие языки ................................................................................162 Напоследок ..................................................................................162 Глава 5. акторы .............................................. 164 Не объекты, а скорее ориентированные на объекты .............. 164
Оглавление День 1: сообщения и почтовые ящики .................................... 166 Наш первый актор ........................................................................166 Почтовые ящики и очереди ...........................................................167 Прием сообщений ........................................................................168 Связывание процессов .................................................................169 Акторы с сохранением состояния .................................................170 Сокрытие сообщений за фасадом API ...........................................171 Двунаправленное взаимодействие ...............................................172 Именование процессов ................................................................174 Отступление – функции первого порядка......................................176 Параллельная версия map() ..........................................................176 В завершение первого дня ...........................................................177 День 2: обработка ошибок и отказоустойчивость ................... 178 Актор кэширования ......................................................................179 Определение момента отказа .......................................................182 Слежение за работой процессов ..................................................185 Тайм-ауты .....................................................................................186 Ядро ошибки ................................................................................187 И пусть падает! .............................................................................189 В завершение второго дня ............................................................190 День 3: распределенные приложения .................................... 191 OTP ..............................................................................................191 Узлы .............................................................................................196 Распределенный счетчик слов ......................................................200 В завершение третьего дня ..........................................................206 В завершение ........................................................................ 207 Сильные стороны .........................................................................208 Слабые стороны ...........................................................................209 Другие языки ................................................................................209 Напоследок ..................................................................................210 Глава 6. взаимодействие последовательных процессов ..................................................... 211 Взаимодействия – это все ..................................................... 211 День 1: каналы и блоки go ...................................................... 213 Каналы .........................................................................................213 Блоки go .......................................................................................217 Операции с каналами ...................................................................222 В завершение первого дня ...........................................................225 День 2: множество каналов и ввод/вывод .............................. 227 Обслуживание множества каналов ...............................................227 Асинхронный опрос ......................................................................230 Асинхронный ввод/вывод .............................................................233 В завершение второго дня ............................................................240 День 3: модель CSP на стороне клиента ................................ 241