(我读过其他问题,但它们指的是旧版本的PHP或前端多线程)
我有一个PHP / PostgreSQL应用程序,它具有复杂的后端处理部分。本质上,有一个很大的循环(数千次迭代)一次又一次地(通过排列)遍历相同的数据。在每个循环中,读取相同的数据,应用操作,并将结果写回到数据库。循环完全相互独立,循环之间不保留任何结果。实际上,要清除对象高速缓存存储器(使用Doctrine),我每100个循环左右就清除一次高速缓存。
所以我基本上有:
for ($i=0; $i<5000; $i++) {
// fetch data
// manipulate data
// write results to a different table
}
在这些循环中,绝不会触及原始数据,只会填充几个结果表。
这目前需要几分钟。在我看来,我喜欢并行处理的教科书示例。
将其置于多种威胁中的最佳方法是什么?我不太在乎执行顺序,也不在乎工作负载是均匀分布的(根据数据操作的性质,如果所有线程都运行相同数量的循环,那么它们最终将承担或多或少的相同工作负载)。我只想使用更多的CPU内核。
我已经在PHP 5中完成了多线程,这是...嗯...还不完美。可行,但困难。 PHP 7中有此改进吗?是否有一种相对简单的方法来基本说“ for(...)并在n个线程中运行它”?
如果有关系,该应用程序将用Symfony4编写,并通过控制台命令调用此后端过程。