Mastering Swoole PHP: Build High Performance Concurrent System with Async and Coroutines / Осваиваем Swoole PHP: построение высокопроизводительной конкурентной системы с асинхронностью и корутинами: Модели конкурентного программирования
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Модели конкурентного программирования bubenok 11.03.21 в 05:45 |
|
|
В разных языках программирования доступны разные модели конкурентного программирования. Например модель акторов в Erlang, взаимодействующие последовательные процессы (communicating sequential processes, CSP) в Golang, программная транзакционная память (software transactional memory, SТМ) в Clojure, Ractors (ранее Guilds) в Ruby 3. bubenok 09.02.22 в 07:05 |
||
|
Изображение 4.5 Модель акторов bubenok 09.02.22 в 07:06 |
||
|
Акторы и CSP считаются похожими: разные исполнительные блоки отправляют сообщения друг другу. Они хранят данные о частных состояниях внутри, не делясь ими и не нуждаясь в блокировках. Они делятся памятью посредством общения, а не общаются посредством разделения памяти. bubenok 09.02.22 в 07:12 |
||
|
Изображение 4.5 Модель CSP bubenok 09.02.22 в 07:13 |
||
|
У акторов и CSP есть некоторые отличия: процессы в CSP анонимны, а у акторов есть идентификация; Каналы в CSP идентифицируются, а в системе акторов - нет; акторы могут отправлять данные асинхронно, а процессы в CSP — нет. bubenok 09.02.22 в 07:15 |
||
|
Изображение 4.6 Модель STM bubenok 09.02.22 в 07:15 |
||
|
Программная транзакционная память (STM) — это модель, в которой используется общая память, но без использования блокировок, что аналогично работе с конкурентными транзакциями базы данных, когда несколько клиентов изменяют одну и ту же общую память. bubenok 09.02.22 в 07:18 |
||
|
Изображение 4.6 Модель Гильдий (Guilds) bubenok 09.02.22 в 07:19 |
||
|
Гильдии (Guilds) построены с использованием концепций CSP, STM и многопоточности. Это самая сложная и новая модель конкурентного программирования. Одна гильдия может содержать несколько потоков, они могут содержать несколько файберов или корутин. Только владелец гильдии может получить доступ к изменяемым данным, поэтому блокировки для нескольких гильдий не требуются. Гильдии могут обмениваться данными, копируя и передавая право собственности на изменяемые данные. Доступ к неизменяемым данным есть у всех гильдий. bubenok 09.02.22 в 07:24 |
||
|
Мы не будем углубляться в темы STM и гильдий в этой книге, если вам интересно, вы можете найти дополнительную информацию в Интернете. bubenok 09.02.22 в 07:26 |
||
|
Модель конкурентности, используемая сервером Swoole это смесь нескольких процессов и модель CSP с использованием нескольких корутин внутри процесса. Различные процессы также могут совместно использовать глобальные данные с Swoole Table. В других разделах книги мы покажем вам, как модель CSP работает в PHP с корутинами и каналами Swoole. bubenok 09.02.22 в 10:35 |
