如何将pthreads添加到MAMP PRO PHP

时间:2016-08-26 13:39:27

标签: php macos mamp mamp-pro

如何在MAC OS X 10.11上将pthread添加到MAMP PRO PHP 5.6.10?

如何安装它并重新编译PHP以使用--enable-maintainer-zts?

1 个答案:

答案 0 :(得分:4)

这个问题是一个XY问题,它不值得这么多的downvotes。

真正的问题

  

如何在向客户端返回响应时执行长时间运行的任务,以便他们感觉不到应用程序很慢

解决方案

使用PHP-FPM和功能fastcgi_finish_request

实施例

<?php

// This is the output that we return to browser.
echo 'Your request has been accepted';

// "hang up" and send the data to the web server 
fastcgi_finish_request();

// Now perform the long running task (this gets executed in background, sort of)
$i = 1;

while($i--)
{
    // We're wasting some CPU cycles to simulate "work" (don't use this in real app)
    sleep(1);
}

潜在问题

即使您可以向客户端返回响应,在任务完成之前,PHP-FPM子进程仍将被占用。由于默认情况下您不启动许多这些过程,因此可以快速耗尽处理能力。

谨慎使用

替代解决方案

替代方案是使用基于作业队列的方法。长时间运行的进程(用PHP编写的守护进程或用Node.js完成的任务)读取任务队列(来自database / nosql,无论你熟悉哪个)并执行任务。

面向前端的PHP只是填充队列并通知客户端作业已排队而没有实际工作。

通过这种方式,您可以让多个工作人员通过读取相同的作业队列源来执行长时间运行的任务。即使一个人死亡或其他不好的事情发生,你也可以通过重新启动工作流程来恢复工作。