Главная » 2019»Октябрь»28 » Прокопец А. - Конкурентное программирование на Scala (2018)
09:09
Прокопец А. - Конкурентное программирование на Scala (2018)
Scala – современный, мультипарадигменный язык программирования, позволяющий описывать типичные шаблоны программирования компактнее, выразительнее и безопаснее.
Scala прекрасно сочетает в себе черты объектно-ориентированных и функциональных языков. Книга начинается с введения в основы конкурентного программирования в JVM и описания модели памяти в Java, а после демонстрирует основные строительные блоки для реализации конкурентных вычислений, такие как атомарные переменные, пулы потоков и конкурентные структуры данных. Затем рассматриваются разные высокоуровневые абстракции конкуренции, каждая из которых ориентирована на решение определенного класса задач, при этом затрагиваются самые последние достижения в поддержке асинхронного программирования. Также охватываются некоторые полезные шаблоны и способы использования описываемых приемов. В заключение дается краткий обзор применения разных библиотек поддержки конкуренции и демонстрируются возможность их совместного использования. Издание предназначено разработчикам с опытом программирования на Scala, но без опыта конкурентного и асинхронного программирования.
Содержание Предисловие......................................................................................................................9 Об авторе.......................................................................................................................... 11 Благодарности................................................................................................................. 12 О технических рецензентах.......................................................................................... 14 Вступление........................................................................................................................ 17 Глава 1. Введение............................................................................................................ 25 Конкурентное программирование................................................................................... 25 Краткий обзор традиционных подходов к организации конкурентного выполнения................................................................................................................... 26 Современные парадигмы конкуренции...................................................................... 27 Преимущества языка Scala............................................................................................... 28 Начальные сведения.......................................................................................................... 29 Выполнение программ на Scala................................................................................... 30 Основы Scala.................................................................................................................. 31 Обзор новых особенностей в Scala 2.12........................................................................... 35 В заключение..................................................................................................................... 36 Упражнения....................................................................................................................... 36 Глава 2. Конкуренция в JVM и модель памяти в Java.............................................. 38 Процессы и потоки............................................................................................................39 Создание и запуск потоков........................................................................................... 41 Атомарное выполнение................................................................................................ 45 Переупорядочение........................................................................................................ 49 Мониторы и синхронизация............................................................................................. 51 Взаимоблокировки........................................................................................................ 53 Защищенные блокировки............................................................................................. 55 Прерывание потоков и корректная остановка............................................................ 59 Изменчивые переменные................................................................................................. 60 Модель памяти в Java........................................................................................................ 62 Неизменяемые объекты и финальные поля................................................................ 64 В заключение..................................................................................................................... 65 Упражнения....................................................................................................................... 66 Глава 3. Традиционные строительные блоки конкурентных программ.............. 69 Объекты Executor и ExecutionContext.............................................................................. 70 Атомарные примитивы..................................................................................................... 73 Атомарные переменные............................................................................................... 73 Неблокирующее программирование........................................................................... 76 Явная реализация блокировок..................................................................................... 78 Проблема ABA................................................................................................................ 80 Ленивые значения............................................................................................................. 82 Конкурентные коллекции................................................................................................. 86 Конкурентные очереди................................................................................................. 88 Конкурентные множества и словари........................................................................... 91 Конкурентные итерации............................................................................................... 95 6 Содержание Собственные конкурентные структуры данных............................................................. 97 Реализация неблокирующего конкурентного пула.................................................... 98 Создание и обработка процессов............................................................................... 102 В заключение................................................................................................................... 103 Упражнения..................................................................................................................... 104 Глава 4. Асинхронное программирование с объектами Future и Promise........ 107 Объекты Future................................................................................................................ 108 Запуск асинхронных вычислений.............................................................................. 109 Объекты Future и обратные вызовы.......................................................................... 111 Объекты Future и исключения.................................................................................... 113 Использование типа Try.............................................................................................. 114 Фатальные исключения.............................................................................................. 115 Композиция функций в объектах Future................................................................... 116 Объекты Promise.............................................................................................................. 123 Преобразование программных интерфейсов на основе обратных вызовов.......... 125 Расширение программного интерфейса объектов Future........................................ 127 Отмена асинхронных вычислений............................................................................ 128 Объекты Future и блокировка выполнения................................................................... 130 Ожидание завершения Future.................................................................................... 130 Блокировка в асинхронных вычислениях................................................................. 131 Библиотека Scala Async................................................................................................... 132 Альтернативные фреймворки асинхронных вычислений........................................... 134 В заключение .................................................................................................................. 135 Упражнения..................................................................................................................... 136 Глава 5. Параллельные коллекции данных............................................................. 139 Краткий обзор коллекций в Scala................................................................................... 140 Использование параллельных коллекций..................................................................... 140 Иерархия классов параллельных коллекций............................................................. 144 Настройка уровня параллелизма............................................................................... 146 Измерение производительности в JVM..................................................................... 146 Особенности параллельных коллекций......................................................................... 149 Непараллелизуемые коллекции................................................................................. 149 Непараллелизуемые операции................................................................................... 150 Побочные эффекты в параллельных операциях....................................................... 152 Недетерминированные параллельные операции..................................................... 153 Коммутативность и ассоциативность операторов.................................................... 154 Совместное использование параллельных и конкурентных коллекций.................... 155 Слабо согласованные итераторы................................................................................ 156 Реализация собственных параллельных коллекций..................................................... 157 Сплиттеры.................................................................................................................... 158 Комбинаторы............................................................................................................... 161 В заключение................................................................................................................... 163 Упражнения..................................................................................................................... 164 Глава 6. Конкурентное программирование с Reactive Extensions...................... 166 Создание объектов Observable........................................................................................ 167 Объекты Observable и исключения............................................................................ 169 Контракт наблюдаемого объекта............................................................................... 170 Реализация собственных объектов Observable......................................................... 172 Содержание 7 Создание наблюдаемых объектов из объектов Future.............................................. 173 Подписки...................................................................................................................... 174 Объединение объектов Observable................................................................................. 176 Вложенные наблюдаемые объекты............................................................................ 178 Обработка ошибок в наблюдаемых объектах............................................................ 182 Планировщики Rx............................................................................................................ 184 Использование собственных планировщиков в приложениях с графическим интерфейсом...................................................................................... 185 Субъекты и реактивное программирование сверху вниз............................................. 190 В заключение................................................................................................................... 194 Упражнения..................................................................................................................... 194 Глава 7. Программная транзакционная память....................................................... 197 Недостатки атомарных переменных............................................................................. 198 Использование программной транзакционной памяти.............................................. 201 Транзакционные ссылки............................................................................................ 204 Использование инструкции atomic............................................................................ 205 Комбинирование транзакций......................................................................................... 206 Взаимодействие транзакций и побочные эффекты................................................. 206 Транзакции с одной операцией................................................................................. 210 Вложенные транзакции.............................................................................................. 211 Транзакции и исключения.......................................................................................... 214 Повторение транзакций.................................................................................................. 218 Повторения с тайм-аутами......................................................................................... 221 Транзакционные коллекции........................................................................................... 222 Локальные переменные транзакций......................................................................... 222 Транзакционные массивы.......................................................................................... 224 Транзакционные словари........................................................................................... 225 В заключение................................................................................................................... 226 Упражнения..................................................................................................................... 227 Глава 8. Акторы.............................................................................................................. 230 Работа с акторами............................................................................................................ 231 Создание экземпляров и систем акторов.................................................................. 233 Управление необработанными сообщениями.......................................................... 236 Поведение и состояние актора................................................................................... 237 Иерархии акторов в Akka............................................................................................ 241 Идентификация акторов............................................................................................ 244 Жизненный цикл акторов.......................................................................................... 246 Взаимодействия между акторами.................................................................................. 249 Шаблон «запрос»......................................................................................................... 251 Шаблон «пересылка»................................................................................................... 253 Остановка акторов...................................................................................................... 254 Диспетчеризация акторов.............................................................................................. 255 Удаленные акторы........................................................................................................... 260 В заключение................................................................................................................... 263 Упражнения..................................................................................................................... 264 Глава 9. Конкуренция на практике............................................................................ 266 Выбор правильных инструментов для решения конкретных задач............................ 266 Объединяем все вместе – сетевой браузер файлов....................................................... 270 8 Содержание Моделирование файловой системы........................................................................... 272 Интерфейс связи с сервером...................................................................................... 275 Программный интерфейс навигации на стороне клиента...................................... 276 Пользовательский интерфейс на стороне клиента................................................... 279 Реализация логики клиента....................................................................................... 282 Усовершенствование сетевого браузера файлов...................................................... 286 Отладка конкурентных программ.................................................................................. 287 Взаимоблокировки и отсутствие прогресса.............................................................. 288 Отладка ошибочных результатов............................................................................... 292 Отладка производительности.................................................................................... 296 В заключение................................................................................................................... 302 Упражнения..................................................................................................................... 303 Глава 10. Реакторы........................................................................................................ 305 Необходимость реакторов.............................................................................................. 306 Введение в фреймворк Reactors..................................................................................... 307 Программа «Hello World»................................................................................................ 308 Потоки событий............................................................................................................... 309 Жизненный цикл потока событий............................................................................. 310 Комбинирование потоков событий........................................................................... 311 Реакторы.......................................................................................................................... 313 Определение и настройка реакторов......................................................................... 314 Использование каналов.............................................................................................. 315 Планировщики................................................................................................................. 317 Жизненный цикл реактора............................................................................................. 319 Службы системы реакторов............................................................................................ 320 Служба журналирования............................................................................................ 321 Служба времени.......................................................................................................... 321 Служба каналов........................................................................................................... 322 Пользовательские службы.......................................................................................... 323 Протоколы........................................................................................................................ 325 Собственная реализация протокола клиент-сервер................................................. 325 Стандартный протокол сервер-клиент...................................................................... 327 Протокол маршрутизации.......................................................................................... 330 Протокол двустороннего обмена............................................................................... 331 В заключение................................................................................................................... 334 Упражнения..................................................................................................................... 335
Название: Конкурентное программирование на Scala Автор: Прокопец А. Год: 2018 Жанр: программирование, компьютерная Издательство: ДМК Пресс Язык: Русский
Формат: pdf Качество: eBook Страниц: 341 Размер: 6 MB
Скачать Прокопец А. - Конкурентное программирование на Scala (2018)