在php中分解递归函数

时间:2011-01-09 02:59:16

标签: php

分解使用大量资源的递归函数的最佳方法是什么

例如:

function do_a_lot(){

   //a lot of code and processing is done here
   //it takes a lot of execution time

   if($true){

      //if true we have to do all of that processing again
      do_a_lot();

   }

}

反正是否要让服务器只需要首先执行首先执行,然后将递归分解为单独的进程?还是我在做梦?

3 个答案:

答案 0 :(得分:0)

老实说,如果你的功能耗尽了系统的大部分资源,我很可能会重构我的代码。但是,它不是真正的多线程,但您可以考虑使用popen来分叉您的进程。

答案 1 :(得分:0)

PHP的一个规则是“不分享”。这意味着每个PHP进程都是独立的,并且与其他进程没有任何共享。因此,如果您想在多个PHP进程上中断执行,则必须将数据存储在某处。它可以是 memcached 存储,数据库,或会话,如您所愿。

然后你需要' fork '你的PHp进程。他们的解决方案可以在服务器端完成。恕我直言,这都是黑客攻击。在PHP / Web方式中危险且没有头脑。除了“工作队列”工具。

我认为最好的方法是用 ajax 打破你的任务。这将为您提供干净的用户界面,并避免Web进程中的任何长响应超时。即向用户显示“工作区”,然后在ajax中询问作业的下一步(第一步),获得响应(在服务器端存储响应),然后请求下一步,存储新响应并响应,然后您甚至可以在客户端添加“停止那个东西”功能。

您也可以在google上查看“php work queue”。

答案 2 :(得分:0)

如果这是一项长期任务,请用gearman

划分并征服