gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:49:01 24 4
gpt4 key购买 nike

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

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

最佳答案

React PHP 提供应用程序的主要事件循环;您仍然需要以非阻塞方式编写代码,因为它都在一个线程上。这一切的可能解决方案都围绕使用 php 展开,这与我相信大多数 php 开发人员所习惯的不同……尽管 React PHP 提供了主循环;大部分 React PHP 库都是 sockets/streams/promise/etc 的实现。这些都采用了方法来实现对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_(computing)#Time_slice)

另一种选择是实现线程(http://php.net/manual/en/book.pthreads.php),通常默认情况下不启用;我能想到的最后一个选项是使用进程控制来 fork /启动/控制其他进程( http://php.net/manual/en/intro.pcntl.php ),这仅在 *nix 系统上启用;让您的主机 CPU 控制时间分片;您只需要将您的应用程序架构为线程安全、与消息队列通信或其他某种机制。

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

关于php - React PHP 如何处理异步非阻塞 I/O?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30863664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com