Rez*_*man 7 php asynchronous concurrent-programming reactphp
React PHP如何处理异步非阻塞I/O?
Nodejs使用其事件队列来处理不同线程上的I/O. 它使用libuv.就像在PHP中一样,React如何处理单个线程上的非阻塞I/O进程?
Met*_*hod 12
React PHP提供应用程序的主要事件循环; 你仍然需要以非阻塞的方式编写代码,因为它只在一个线程上.对此的可能解决方案都围绕使用PHP而不是我确信大多数PHP开发人员习惯...虽然React PHP提供了主循环; 大部分React PHP库是socket/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); 我能想到的最后一个选项是使用进程控制来分叉/启动/控制其他进程(http://php.net/manual/en/intro.pcntl.php),该进程仅在*nix系统上启用; 它让你的主机CPU控制时间切片; 您只需要将应用程序架构为线程安全,与消息队列通信或其他一些机制.
tldr; 使用您的应用程序体系结构不会导致php阻塞,将流设置为阻止,或使用线程/进程控制来管理您自己的多线程.
归档时间: |
|
查看次数: |
3543 次 |
最近记录: |