React PHP 如何处理异步非阻塞 I/O ?
Nodejs 使用其事件队列来处理不同线程上的 I/O。它为此使用 libuv。就像在PHP中一样,没有这样的东西,React如何在单个线程上处理非阻塞I/O进程?
React PHP 提供了应用程序的主要事件循环;您仍然需要以非阻塞方式编写代码,因为它都在一个线程上。对此的可能解决方案都围绕着使用 php 与我相信大多数 php 开发人员习惯不同的方式......虽然 React PHP 提供了主循环;大部分 React PHP 库是套接字/流/承诺/等的实现。它们都采用了实现对 I/O 的非阻塞访问的方法;通常通过使用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_(计算)#Time_slice)
另一种选择是实现通常默认不启用的线程 (http://php.net/manual/en/book.pthreads.php);我能想到的最后一个选项是使用进程控制来分叉/启动/控制其他进程 (http://php.net/manual/en/intro.pcntl.php),这仅在 *nix 系统上启用;让您的主机 CPU 控制时间切片;您只需将应用程序构建为线程安全、与消息传递队列通信或某种其他机制。
TLDR;使用应用程序体系结构不会导致 php 阻塞,将流设置为不阻塞,或使用线程/进程控制来管理您自己的多线程。