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
Предисловие......................................................................................................................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)
Скачать с 2bay.org
Скачать с Katfile.com
Скачать с Gigapeta.com