首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >amphp是如何工作的?

amphp是如何工作的?
EN

Stack Overflow用户
提问于 2017-06-24 20:12:15
回答 1查看 3.6K关注 0票数 8

他们的网站http://amphp.org/faq上的文档对我来说不是很清楚。事情让我很困惑。它是否打算作为服务器运行??还是以CLI的身份运行?或者在web容器中运行( apache,nginx )?而php本质上是同步的,如果没有某种扩展(比如p线程)的支持,它怎么可能是异步的。

编辑--

放大器的潜在应用:后台线程?在简单的用例中,例如,用户提交订单,php可能会长时间讨论处理订单。因此,我们希望在使用线程时做到这一点(就像一样,总是这样做),而不是让用户等待。我们知道它可以用cron作业或附加的ajax来完成,但是它很难看,而且我们有很多异步需求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-24 20:25:53

放大器使用非阻塞I/O来实现并发.PHP通过blocking对此提供了本机支持。

放大器可以在CLI应用程序中使用,但也可以在其他SAPI(如Apache中)中使用,以便向某些服务发出多个并发请求。如果要将异步嵌入到其他同步应用程序中,可以为此使用Amp\Promise\wait

代码语言:javascript
复制
$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));

放大器通常是单线程的.只有使用像amphp/parallel这样的东西时,才是多线程的。amphp/parallel可以使用pthreads或多个进程并行执行多个阻塞对象。

如果你有更具体的问题,只需编辑你的问题和评论,我会尽力回答它们。

关于后台处理,是的,这在amphp/parallel中是可能的,但是原始进程必须保持活力。您可能可以在disown中实现amphp/process机制,以使进程在父进程死后也能运行,然后它也可以在Apache或PHP中工作。

但是,我通常会为这样的任务推荐一个队列,因为队列将使重新启动失败的任务成为可能(在工人崩溃的情况下),并且如果有很多后台作业,也不会导致极高的负载,因为不是所有的任务都会立即启动,而是在工作人员有时间的时候在后台处理。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44740557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档