Mastering Swoole PHP: Build High Performance Concurrent System with Async and Coroutines / Осваиваем Swoole PHP: построение высокопроизводительной конкурентной системы с асинхронностью и корутинами: Вытесняющая и кооперативная многозадачность
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Вытесняющая и кооперативная многозадачность bubenok 09.02.22 в 12:50 |
|
|
Кооперативное планирование — это идея, используемая многозадачным планированием корутин. Оно решает очень простую проблему, позволяя совместно использовать ЦП нескольким задачам, которые работают вместе. Каждая корутина активно освобождает ЦП для других задач, явно вызывая функцию yield(). Уступленные (yielded ) корутины могут запрашивать ЦП, вызывая функцию resume(). Кооперативное планирование дешевле и проще в реализации или использовании. Лучший вариант использования кооперативного планирования — это система с одним пользователем и одним поставщиком, такая как небольшие устройства IoT. bubenok 09.02.22 в 12:54 |
||
|
Возможно, вы заметили одну проблему кооперативного планирования: если одна задача занята выполнением и не вызывает функцию yield(), другие сопрограммы могут зависнуть и не могут быть выполнены. В Swoole вместо того, чтобы просить разработчиков вызывать методы yield и resume, движок Swoole вызывает эти методы на основе статуса выполнения текущей задачи корутины. Когда корутине нужно дождаться результата ввода-вывода, она вызывает метод yield и переключается на другую готовую к выполнению сопрограмму. Когда результат ввода-вывода готов, он вызывает метод resume и позволяет корутине продолжить выполнение с использованием ЦП. bubenok 09.02.22 в 12:56 |
||
|
Вытесняющее планирование используется современными ОС, оно решает очень сложную проблему эффективного распределения ресурсов ЦП между всеми задачами. Каждой задаче в конечном итоге будет предоставлена возможность использовать ЦП после определенного периода времени или циклов ЦП. Большинство современных устройств и ОС поддерживают вытесняющее планирование, поскольку система становится все более сложной. bubenok 09.02.22 в 12:58 |
||
|
Как и многие современные языки программирования и фреймворки, Swoole PHP использует оба подхода планирования, чтобы обеспечить постоянное время отклика и лучшую загрузку ЦП. bubenok 09.02.22 в 12:59 |
