php - PHP 中的多线程/并行处理

标签 php mysql multithreading concurrency phpexcel

我有一个 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/

相关文章:

php - Preg_match 字母数字 - _' "和空格

mysql - Magento 重建索引问题 - 一般错误 : 1005 Can't create table (errno: 121)

php - 具有连接表的二维数组

设置对象引用的 Java 线程安全性

创建多线程进行平方根运算

php - CodeIgniter ODBC 问题

带有变量的 PHP Math 不起作用

php - 如何加载命名空间的所有类?

mysql - Rails 会创建任何连接到 mysql 的连接池吗?它是单线程设计吗?

Python 2.6 与 2.7 多线程性能问题 (futex)