React PHP如何处理异步非阻塞I/O?

问题描述:

React PHP如何处理异步非阻塞I/O?React PHP如何处理异步非阻塞I/O?

Nodejs使用它的事件队列来处理不同线程上的I/O。它为此使用libuv。正如在PHP中没有那样的东西,React如何处理单个线程上的非阻塞I/O进程?

+0

[ReactPHP是否真的是异步?](http://*.com/questions/22502118/reactphp-is-truely-asynchronous) – Blizz

React PHP提供应用程序的主要事件循环;您仍然需要以非阻塞的方式编写代码,因为它全部在一个线程上。这一切的可能的解决方案围绕使用PHP不同,我相信大多数PHP开发人员都习惯于......虽然React PHP提供了主循环;大部分React PHP库都是sockets/streams/promise/etc的实现。这些都采用了方法来实现对I/O的非阻塞访问;通常通过使用stream_set_blockinghttp://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);我能想到的最后一个选项是使用流程控制来分叉/启动/控制仅在* nix系统上启用的其他流程(http://php.net/manual/en/intro.pcntl.php);它让主机CPU控制时间分片;您只需要构建您的应用程序,以使其成为线程安全的,与消息队列通信或其他一些机制。

tldr;使用你的应用程序架构不会导致php阻塞,设置你的流不阻塞,或者使用线程/进程控制来管理你自己的多线程。