React PHP 如何处理异步非阻塞 I/O?
Nodejs 使用其事件队列来处理不同线程上的 I/O。它使用 libuv 来实现此目的。 PHP 中没有类似的东西,React 如何处理单线程上的非阻塞 I/O 进程?
React PHP 提供了应用程序的主要事件循环;您仍然需要以非阻塞方式编写代码,因为它全部在一个线程上。所有可能的解决方案都围绕着使用 php 进行,这与我确信大多数 php 开发人员习惯的方式不同...... React PHP 库的大部分是套接字/流/承诺等的实现。这些都采用了方法来实现对I/O的非阻塞访问;通常通过使用stream_set_blocking
(http://php.net/manual/en/function.stream-set-blocking.php http://php.net/manual/en/function.stream-set-blocking.php)
其他选项包括编程类似于 FSM 的东西(https://en.wikipedia.org/wiki/Finite-state_machine https://en.wikipedia.org/wiki/Finite-state_machine);这允许它随着进展不断更新当前状态;每次允许运行某些代码块,然后将线程放弃给循环中的其他任何内容。本质上是实现你自己的时间切片(https://en.wikipedia.org/wiki/Preemption_(computing)#Time_slice https://en.wikipedia.org/wiki/Preemption_(computing)#Time_slice)
另一种选择是实现线程(http://php.net/manual/en/book.pthreads.php http://php.net/manual/en/book.pthreads.php) 通常默认情况下不启用;我能想到的最后一个选择是使用进程控制来分叉/启动/控制其他进程(http://php.net/manual/en/intro.pcntl.php http://php.net/manual/en/intro.pcntl.php) 仅在 *nix 系统上启用;让您的主机 CPU 控制时间切片;您只需要将应用程序设计为线程安全、与消息队列通信或其他机制即可。
太棒了;使用您的应用程序架构不导致 php 阻塞,将流设置为不阻塞,或者使用线程/进程控制来管理您自己的多线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)