Mastering Swoole PHP: Build High Performance Concurrent System with Async and Coroutines / Осваиваем Swoole PHP: построение высокопроизводительной конкурентной системы с асинхронностью и корутинами: Контейнеры общего исполнения

Оглавление
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Контейнеры общего исполнения

bubenok 09.02.22 в 12:25

0

Сервисы

bubenok 09.02.22 в 12:25

0

В общем виде мы можем думать о каждом сервисе как о контейнере выполнения. Каждый сервис хранит какие-то данные, предоставляет какие-то функции и возможности. Каждый сервис может взаимодействовать с другими сервисами или взаимодействовать с пользователями-людьми.

bubenok 09.02.22 в 12:26

0

Микросервисы — одна из самых популярных за последние несколько лет методологий системной архитектуры. Она более масштабируема, чем монолитная система. Каждый сервис может масштабироваться независимо от того, разрабатывается ли он, или уже работает.

bubenok 09.02.22 в 12:29

0

Но недостатком микросервисов являются затраты на связь и накладные расходы по сравнению с монолитными системами. Состояния, которые вам нужны в данный момент, могут оставаться на другом сервере в том же датацентре или даже на удаленном сервере в интернете.

bubenok 09.02.22 в 12:31

0

Сервер или Инстанс

bubenok 09.02.22 в 12:32

0

Каждый веб-сервер или инстанс виртуального сервера в облаке можно рассматривать как исполняемый контейнер. Он хранит данные в памяти или на диске.

bubenok 09.02.22 в 12:34

0

Каждый сервер может связываться с другими серверами с помощью IP-адреса и порта, устанавливая соединения TCP/UDP.

bubenok 09.02.22 в 12:35

0

Область применения сервера или инстанса меньше по сравнению с сервисом.

bubenok 09.02.22 в 12:36

0

Процесс

bubenok 09.02.22 в 12:36

0

Наиболее распространенным исполняемым контейнером в ОС Linux является процесс . В рамках процесса может выполняться одна задача. Различные приложения работают одновременно как несколько разных изолированных процессов.

bubenok 09.02.22 в 12:38

0

Внутри процесс хранит текущее состояния приложения в памяти в любой момент времени. Обычно к памяти нельзя получить доступ или изменить ее извне.

bubenok 09.02.22 в 12:39

0

Использование большего количества процессов не сделает ваше приложение быстрее. Во-первых, несколько процессов могут использовать одни и те же ресурсы при чтении одного и того же файла на диске. Несколько считывателей на самом деле работают медленнее, чем один считыватель. Во-вторых, существуют накладные расходы на управление большим количеством процессов со стороны операционной системы и дополнительные затраты на переключение контекста.

bubenok 09.02.22 в 12:40

0

Если у вас есть опыт управления серверами PHP-FPM, вы должны знать, что не сможете обслуживать больше запросов, просто увеличив номер процесса PHP-FPM. Дополнительные процессы могут использовать больше ЦП и снижать производительность.

bubenok 09.02.22 в 12:41

0

Как правило, только вычисления, связанные с процессором, могут быть ускорены несколькими процессами. Но большинство наших приложений и веб-систем связаны с вводом-выводом, поэтому нам приходится решать проблему с помощью другого подхода.

bubenok 09.02.22 в 12:42

0

Потоки

bubenok 09.02.22 в 12:42

0

Потоки более легкие по сравнению с процессами. Несколько потоков создаются в рамках одного процесса и имеют общие глобальные состояния. По умолчанию каждый поток может получать доступ к глобальным состояниям и изменять их в любой момент времени.

bubenok 09.02.22 в 12:43

0

Для синхронизации данных используются блокировки, чтобы избежать потери данных, вызванной изменением глобальных состояний несколькими потоками. Если несколько потоков обращаются к одной и той же изменяемой переменной состояния без соответствующей синхронизации, ваша программа не работает.

bubenok 09.02.22 в 12:44

0

Известно, что очень сложно писать и отлаживать высокопроизводительную конкурентную программу с потоками и блокировками. Нам приходится сталкиваться с такими проблемами, как мертвые блокировки (deadlock), гонки за данными ( data races) и т. д. В некоторых современных языках программирования даже нет концепции пользовательских потоков, таких как Node.js или PHP.

bubenok 09.02.22 в 12:46

0

Корутины

bubenok 09.02.22 в 12:46

0

Корутины, о которых мы говорим в этой книге, — это легковесные потоки пользовательского пространства, созданные внутри одного процесса. Каждая корутина может совместно предоставлять права на выполнение другим корутинам. Мы можем назвать корутины Swoole файберами, потому что Swoole планирует корутины на основе ожидания ввода-вывода или состояния готовности, а также предоставляет упреждающий планировщик для переключения на другую корутину, когда одна использует слишком много времени ЦП.

bubenok 09.02.22 в 12:48

0

Вы также можете найти реализацию корутин на Lua, Golang и других языках программирования. Концепции и способ использования почти одинаковы.

bubenok 09.02.22 в 12:49

0
Минутку...