2015-06-16 2 views
6

Как React PHP обрабатывает асинхронные неблокирующие операции ввода-вывода?Как React PHP обрабатывает асинхронные неблокирующие операции ввода-вывода?

Nodejs использует свою очередь событий, которая обрабатывает операции ввода-вывода на разных потоках. Для этого он использует libuv. Как и в PHP, нет ничего подобного: How React обрабатывает неблокирующий процесс ввода-вывода в одном потоке?

+0

Возможный дубликат [ReactPHP - истинно асинхронный?] (Http://stackoverflow.com/questions/22502118/reactphp-is-truely-asynchronous) – Blizz

ответ

12

React PHP обеспечивает основной цикл событий приложения; вам по-прежнему требуется написать свой код неблокирующим способом, поскольку он находится на одном потоке. Возможные решения для всего этого связаны с использованием php иначе, чем я уверен, что большинство разработчиков php используются ... Хотя React PHP предоставляет основной цикл; основная часть библиотек React PHP - это реализация для сокетов/потоков/обещаний/и т. д. Они используют все используемые методы для достижения неблокирующего доступа к вводу/выводу; обычно с использованием stream_set_blocking (http://php.net/manual/en/function.stream-set-blocking.php)

Другие варианты включают в себя программирование чего-то похожего на FSM (https://en.wikipedia.org/wiki/Finite-state_machine); который позволяет ему постоянно обновлять текущее состояние по мере его продвижения; каждый раз позволяя запускать определенные куски кода, а затем отказываясь нить от чего-либо еще в цикле. По существу, ваша собственная временная нарезка (https://en.wikipedia.org/wiki/Preemption_(computing)#Time_slice)

Другой вариант - реализовать потоки (http://php.net/manual/en/book.pthreads.php), которые по умолчанию не включены; И последний вариант, о котором я могу думать, заключается в использовании управления процессом либо fork/start/control других процессов (http://php.net/manual/en/intro.pcntl.php), который включен только в системах * nix; который позволяет процессору вашего хоста управлять срезом времени; вам просто потребуется архивировать приложение, чтобы он был потокобезопасным, общался с очередями обмена сообщениями или каким-то другим механизмом.

tldr; Используйте свою архитектуру приложения, чтобы не заставлять php блокировать, устанавливать потоки не блокировать или использовать управление потоком/процессом для управления вашей собственной многопотоковой обработкой.

Смежные вопросы