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 |
|
|
На Рисунке 2.1 показаны четыре задачи, выполняемых друг за другом на одном из ядер процессора. Светло-серые области отражают время ожидания I/O. Как можно видеть, в этот момент загрузка процессора очень низка. Именно так, в целом, и работают процессы PHP-FPM. Kee 30.01.21 в 12:43 |
||
|
Больше того, в Linux заблокированный процесс продолжает висеть в памяти и удерживает ресурсы, не позволяя выполняться никаким другим задачам. Kee 30.01.21 в 12:45 |
||
|
Здесь на помощь приходит неблокирующий I/O. Пока одна задача ожидает ответа, мы можем переключиться на другие, и вернуться обратно, как только результат выполнения будет готов. Kee 30.01.21 в 12:48 |
||
|
На Рисунке 2.2 серым цветом отмечено время работы ЦП, а светло-серым - время ожидания ввода-вывода. Четыре задачи запущены одновременно, и пока одна из задач ждёт результата операций I/O, другие используют свободное процессорное время. Именно так работают системы с неблокирующим I/O, к которым относится и Swoole. Kee 30.01.21 в 12:52 |
||
|
Системы с неблокирущим I/O уменьшают время простоя процессора и позволяют выполнить большее количество задач за меньшее время. Вот почему Swoole способен обработать намного больше одновременных запросов, чем PHP-FPM. Подробнее на этой теме мы остановимся в следующих разделах. Kee 30.01.21 в 13:00 |
