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

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

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

Язык PHP создавался, как связующий слой для вызова сервисов, написанных на C, и блокирующая модель ввода-вывода присуща ему изначально. Почти во всех клиентских библиотеках, использующие операции I/O скрипты блокируются при выполнении на PHP-FPM, дожидаясь ответа от удалённых серверов.

Kee 30.01.21 в 12:40

0

На Рисунке 2.1 показаны четыре задачи, выполняемых друг за другом на одном из ядер процессора. Светло-серые области отражают время ожидания I/O. Как можно видеть, в этот момент загрузка процессора очень низка. Именно так, в целом, и работают процессы PHP-FPM.

Kee 30.01.21 в 12:43

0

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

Kee 30.01.21 в 12:45

0

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

Kee 30.01.21 в 12:48

0

На Рисунке 2.2 серым цветом отмечено время работы ЦП, а светло-серым - время ожидания ввода-вывода. Четыре задачи запущены одновременно, и пока одна из задач ждёт результата операций I/O, другие используют свободное процессорное время. Именно так работают системы с неблокирующим I/O, к которым относится и Swoole.

Kee 30.01.21 в 12:52

0

Системы с неблокирущим I/O уменьшают время простоя процессора и позволяют выполнить большее количество задач за меньшее время. Вот почему Swoole способен обработать намного больше одновременных запросов, чем PHP-FPM. Подробнее на этой теме мы остановимся в следующих разделах.

Kee 30.01.21 в 13:00

0
Минутку...