如何将 pthreads 添加到 MAMP PRO PHP

How to add pthreads to MAMP PRO PHP

如何在 MAC OS X 10.11 上向 MAMP PRO PHP 5.6.10 添加 pthreads?

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

这个问题是一个 XY 问题,不值得这么多反对票。

真正的问题

how to perform a long running task while returning a response to the client so they don't feel the app is slow

解决方案

使用 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);
}

潜在问题

即使您可以return 响应客户端,PHP-FPM 子进程仍将被占用,直到任务完成。由于默认情况下您不会启动其中许多进程,因此您可以很快 运行 处理能力不足。

谨慎使用

备选方案

替代方法是使用基于作业队列的方法。一个长的 运行ning 进程(用 PHP 编写的守护程序或用 Node.js 完成的东西)读取任务队列(从数据库/nosql,无论您熟悉哪个)并执行任务。

面向前端的 PHP 只是填充队列并通知客户端作业已排队,而无需实际执行工作。

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