ebook img

Многопоточный JavaScript PDF

190 Pages·2022·7.305 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Многопоточный JavaScript

Томас Хантер II, Брайан Инглиш Многопоточный JavaScript Multithreaded JavaScript Concurrency Beyond the Event Loop Thomas Hunter II and Bryan English Beijing • Boston • Farnham • Sebastopol • Tokyo Многопоточный JavaScript Конкурентность за пределами цикла событий Томас Хантер II, Брайан Инглиш Москва, 2022 УДК 004.42 ББК 32.972 Х19 Хантер II Т., Инглиш Б. Х19 Многопоточный JavaScript / пер. с англ. А. А. Слинкина. – М.: ДМК Пресс, 2022. – 188 с.: ил. ISBN 978-5-93700-129-0 Цель данной книги – научить читателя нескольким аспектам написания много- поточных JavaScript-приложений. Прочитав книгу до конца, вы будете понимать различные API веб-исполнителей в браузерах, их сильные и слабые стороны и когда какой использовать. Также узнаете о модуле рабочих потоков в Node.js и сможете сравнить его API с тем, что имеется в браузере. Издание предназначено в первую очередь разработчикам, уже знакомым с JavaScript, но мало знакомым с многопоточным программированием. УДК 004.42 ББК 32.972 Authorized Russian translation of the English edition of Multithreaded JavaScript ISBN 9781098104436. Copyright © 2022 Thomas Hunter II and Bryan English. Все права защищены. Любая часть этой книги не может быть воспроизведена в ка- кой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. ISBN 978-1-098-10443-6 (англ.) © T homas Hunter II and Bryan English, 2022 ISBN 978-5-93700-129-0 (рус.) © П еревод, оформление, издание, ДМК Пресс, 2022 Посвящается Кэтлин и Ренье Содержание От издательства ......................................................................................................9 Вступительное слово .........................................................................................10 Предисловие ..........................................................................................................12 Об авторах ..............................................................................................................16 Об иллюстрации на обложке .........................................................................17 Глава 1. Введение ................................................................................................18 Что такое потоки? ......................................................................................................20 Конкурентность и параллелизм ...............................................................................21 Однопоточный Java Script ..........................................................................................23 Скрытые потоки .........................................................................................................25 Потоки на C: обогатитесь с помощью криптовалюты Happycoin .......................27 С одним главным потоком ...................................................................................27 С четырьмя рабочими потоками .........................................................................30 Глава 2. Браузеры ................................................................................................34 Выделенные исполнители ........................................................................................34 Выделенный исполнитель Hello World ...............................................................35 Продвинутое использование выделенного исполнителя ................................38 Разделяемые исполнители .......................................................................................39 Разделяемый исполнитель Hello World ..............................................................41 Продвинутое использование разделяемого исполнителя ..............................45 Сервисные исполнители ...........................................................................................47 Сервисный исполнитель Hello World ..................................................................48 Продвинутые возможности сервисных исполнителей ....................................53 Абстракции передачи сообщений ...........................................................................55 Паттерн RPC ............................................................................................................56 Паттерн Диспетчер команд ..................................................................................57 Соберем все вместе ................................................................................................59 Глава 3. Node.js .....................................................................................................65 Что было до потоков ..................................................................................................66 Модуль worker_threads ...............................................................................................68 workerData ...............................................................................................................69 MessagePort .............................................................................................................69 И снова Happycoin ......................................................................................................71 С одним главным потоком ...................................................................................72 Содержание  7 С четырьмя потоками ...........................................................................................74 Piscina – организация пула рабочих потоков ........................................................75 Полный пул Happycoin’ов .........................................................................................79 Глава 4. Разделяемая память ........................................................................82 Введение в разделяемую память .............................................................................82 Разделяемая память в браузере ...........................................................................83 Разделяемая память в Node.js ..............................................................................85 SharedArrayBuffer и типизированные массивы .....................................................87 Атомарные методы манипулирования данными .................................................92 Atomics.add() ...........................................................................................................92 Atomics.and() ...........................................................................................................93 Atomics.compareExchange() ..................................................................................93 Atomics.exchange() .................................................................................................93 Atomics.isLockFree() ...............................................................................................93 Atomics.load() ..........................................................................................................94 Atomics.or() .............................................................................................................94 Atomics.store() ........................................................................................................94 Atomics.sub() ...........................................................................................................94 Atomics.xor()............................................................................................................95 Несколько замечаний об атомарности ...................................................................95 Сериализация данных ...............................................................................................98 Булевы значения ....................................................................................................98 Строки .....................................................................................................................99 Объекты .................................................................................................................101 Глава 5. Дополнительные способы работы с разделяемой памятью ..................................................................................................................102 Атомарные методы координации .........................................................................102 Atomics.wait() ........................................................................................................103 Atomics.notify() .....................................................................................................104 Atomics.waitAsync() ..............................................................................................105 Хронометраж и недетерминированность ............................................................105 Пример недетерминированности .....................................................................105 Определение готовности потока .......................................................................108 Пример приложения: игра «Жизнь» Конвея ........................................................110 Однопоточная игра «Жизнь» .............................................................................111 Многопоточная игра «Жизнь» ...........................................................................114 Атомарные операции и события ...........................................................................121 Глава 6. Паттерны многопоточного программирования ..............123 Пул потоков ...............................................................................................................123 Размер пула...........................................................................................................124 Стратегии диспетчеризации ..............................................................................125 Пример реализации ............................................................................................127 Мьютекс: простая блокировка ...............................................................................132 8  Содержание Потоковая обработка данных с помощью кольцевых буферов ........................137 Модель акторов ........................................................................................................144 Нюансы паттерна .................................................................................................144 Акторы в JavaS cript ..............................................................................................145 Пример реализации ............................................................................................146 Глава 7. WebAssembly.......................................................................................153 Ваша первая WebAssembly ......................................................................................153 Атомарные операции в WebAssembly ...................................................................155 Компиляция с C на WebAssembly с помощью Emscripten ..................................156 Другие компиляторы на WebAssembly .................................................................158 AssemblyScript ...........................................................................................................159 Happycoin на AssemblyScript ...................................................................................160 Глава 8. Анализ ....................................................................................................165 Когда не стоит использовать потоки.....................................................................165 Ограничения на объем памяти ..........................................................................166 Недостаточное число ядер .................................................................................168 Контейнеры и потоки ..........................................................................................171 Когда стоит использовать потоки ..........................................................................171 Подводные камни ....................................................................................................176 Приложение. Алгоритм структурированного клонирования ......178 Предметный указатель ...................................................................................181 От издательства Отзывы и пожелания Мы всегда рады отзывам наших читателей. Расскажите нам, что вы ду маете об этой книге, – что понравилось или, может быть, не понравилось. Отзывы важны для нас, чтобы выпускать книги, которые будут для вас максимально полезны. Вы можете написать отзыв на нашем сайте www.dmkpress.com, зайдя на страницу книги и оставив комментарий в разделе «Отзывы и рецензии». Также можно послать письмо главному редактору по адресу dmkpress@gmail. com; при этом укажите название книги в теме письма. Если вы являетесь экспертом в какой-либо области и заинтересованы в на- писании новой книги, заполните форму на нашем сайте по адресу http:// dmkpress.com/authors/publish_book/ или напишите в издательство по адресу [email protected]. Список опечаток Хотя мы приняли все возможные меры для того, чтобы обеспечить высо- кое качество наших текстов, ошибки все равно случаются. Если вы найдете ошибку в одной из наших книг, мы будем очень благодарны, если вы сооб- щите о ней главному редактору по адресу [email protected]. Сделав это, вы избавите других читателей от недопонимания и поможете нам улучшить последующие издания этой книги. Нарушение авторских прав Пиратство в интернете по-прежнему остается насущной проблемой. Издатель- ства «ДМК Пресс» и O’Reilly очень серьезно относятся к вопросам защиты ав- торских прав и лицензирования. Если вы столкнетесь в интернете с незаконной публикацией какой-либо из наших книг, пожалуйста, пришлите нам ссылку на интернет-ресурс, чтобы мы могли применить санкции. Ссылку на подозрительные материалы можно прислать по адресу элект- ронной почты [email protected]. Мы высоко ценим любую помощь по защите наших авторов, благодаря которой мы можем предоставлять вам качественные материалы.

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.