他们网站上的文档http://amphp.org/faq http://amphp.org/faq我不太清楚。事情让我很困惑。它打算作为服务器运行吗?或作为 CLI 运行?或者在 Web 容器(apache、nginx fpm)中运行? php 本质上是同步的,如果没有某种扩展(如 pthread )的支持,它怎么可能是异步的。
EDIT ---
amp 的潜在应用:后台线程?在一个简单的用例中,比如用户提交订单,php 可能会花一些时间来处理订单。因此,我们希望使用线程(就像 Java servlet 一直这样做),同时不让用户等待。我们知道这可以通过 cron-job 或 extra-ajax 来完成,但它很丑陋,而且我们有很多这种异步要求
Amp 使用非阻塞 I/O 来实现并发。 PHP 对此有本机支持http://php.net/stream_set_blocking http://php.net/stream_set_blocking.
Amp 可以在 CLI 应用程序中使用,但也可以在其他 SAPI 中使用,例如在 Apache 中向某些服务发出多个并发请求。如果您想将异步嵌入到同步应用程序中,您可以使用Amp\Promise\wait
为了那个原因:
$uris = ["https://google.com/", "https://github.com/"];
$client = new Amp\Artax\BasicClient;
$promises = array_map(function ($uri) use ($client) {
return $client->request($uri);
}, $uris)
$responses = Amp\Promise\wait(Amp\Promise\all($promises));
Amp 通常是单线程的。如果您使用类似的东西,它只是多线程amphp/parallel https://github.com/amphp/parallel. amphp/parallel
可以使用pthreads
或多个进程并行执行多个阻塞的事情。
如果您有更具体的问题,只需编辑您的问题和评论,我会尽力回答。
关于后台处理,是的,这是可能的amphp/parallel
,但原始进程必须为此保持活动状态。你也许可以实现一个disown
机制在amphp/process
如果父进程挂掉,进程也能保持运行,那么它也可以在 Apache 或 PHP-FPM 中运行。
但我通常建议为此类任务使用队列,因为队列可以重新启动失败的任务(以防工作线程崩溃),并且如果有很多后台作业,也不会导致极高的负载,因为并非所有后台作业将立即启动,但当工作人员有时间时在后台进行处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)