Готовый перевод Mastering Swoole PHP: Build High Performance Concurrent System with Async and Coroutines / Осваиваем Swoole PHP: построение высокопроизводительной конкурентной системы с асинхронностью и корутинами: Блокирование ввода/вывода в PHP-FPM
Язык PHP создавался, как связующий слой для вызова сервисов, написанных на C, и блокирующая модель ввода-вывода присуща ему изначально. Почти во всех клиентских библиотеках, использующие операции I/O скрипты блокируются при выполнении на PHP-FPM, дожидаясь ответа от удалённых серверов.
На Рисунке 2.1 показаны четыре задачи, выполняемых друг за другом на одном из ядер процессора. Светло-серые области отражают время ожидания I/O. Как можно видеть, в этот момент загрузка процессора очень низка. Именно так, в целом, и работают процессы PHP-FPM.
Больше того, в Linux заблокированный процесс продолжает висеть в памяти и удерживает ресурсы, не позволяя выполняться никаким другим задачам.
Здесь на помощь приходит неблокирующий I/O. Пока одна задача ожидает ответа, мы можем переключиться на другие, и вернуться обратно, как только результат выполнения будет готов.
На Рисунке 2.2 серым цветом отмечено время работы ЦП, а светло-серым - время ожидания ввода-вывода. Четыре задачи запущены одновременно, и пока одна из задач ждёт результата операций I/O, другие используют свободное процессорное время. Именно так работают системы с неблокирующим I/O, к которым относится и Swoole.
Системы с неблокирущим I/O уменьшают время простоя процессора и позволяют выполнить большее количество задач за меньшее время. Вот почему Swoole способен обработать намного больше одновременных запросов, чем PHP-FPM. Подробнее на этой теме мы остановимся в следующих разделах.
Внимание! Этот перевод, возможно, ещё не готов.
Его статус: идёт перевод
Переведено на Нотабеноиде
http://notabenoid.org/book/81342/496682
Переводчики: Kee
Настройки
Готово:
