我有一个 PHP 脚本,它将使用 PHPExcel 从从 MySQL 数据库查询的数据生成报告。目前,它是线性处理,因为它从 MySQL 取回数据,读入 Excel 模板,将数据写入模板,然后输出。我已经优化了代码,使数据只迭代一次,并且在 PHP 端完成的处理很少。查询在不到 0.001 秒内返回数百行,因此它运行得足够快。一段时间后,我发现我的瓶颈是(惊讶,惊讶)读取模板和编写输出。 我想这样做:
Spawn a thread/process to read the template
Spawn a thread/process to fetch the data
Return back to parent thread - Parent thread will wait until both are complete
Proceed on as normal
我的主要问题是这是否可能,是否值得?如果两者都是,您将如何解决? 另外,它是 CentOS 上的 PHP 5
最佳答案
fork 一个 Apache 进程通常不是一个好主意。这可能会导致不确定的结果。相反,最好使用某种排队机制。 Gearman 是您可以使用的开源排队机制。我还有一篇关于 Zend Server Job Queue 的博文,其中讨论了异步运行任务 Do you queue? Introduction to the Zend Server Job Queue .
您还可以使用类似 Zend Framework Queuing 类的东西来实现一些异步工作。 Zend_Queue
@Swisstack,我也不同意您关于 PHP 不是为高性能而创建的说法。很少有语言特性会导致性能下降。也许通过比较不同语言之间的 $a++ 进行原始语言测试,您会看到这一点,但这种类型的测试是无关紧要的。我从事 PHP 咨询工作多年,从未见过因语言引起的性能问题。
关于php - PHP 中的多线程/并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2678761/