Php多线程

时间:2009-10-07 14:40:48

标签: php multithreading

Php,并不是真的为多线程做的,但是你有什么解决方法来处理php中的线程。

6 个答案:

答案 0 :(得分:26)

有一些解决方案,从“嗯,只是好”到“睁开你的眼睛”。

  1. 将您的多线程代码编写为PHP extension。可能是最受支持的,但您需要使用C(或其他支持扩展的语言)编写。
  2. 将子进程生成到底层操作系统,并使用标准文件句柄读/写其输入/输出。有关一条路线,请参阅popen,或PCNTL。合理,您可以从命令行使用PHP。
  3. 通过CURL或类似方式向自己发出其他HTTP请求,从而捎带您的Web服务器多处理能力。保持所有代码“像网络一样”,但冒着愤怒的支持开发人员跟踪你并打破拇指的风险。

答案 1 :(得分:20)

由于这是谷歌的最佳结果,因此php有一个新的扩展名,pthreads:http://www.php.net/manual/en/book.pthreads.php专门用于此。

答案 2 :(得分:6)

检查PCNTL library。它可以帮助您模拟一些线程行为。

还有this class

  

“此类可以模拟执行   程序线程使用单独的HTTP   请求相同的脚本。

     

建立HTTP连接   同一个Web服务器来执行   相同的PHP脚本。它发送请求   将名称传递给要执行的函数   以及要传递给它的论据   功能

     

请求的脚本执行一些   检测线程执行的代码   请求并调用指定的   功能

     

当线程请求脚本结束时,   被调用的返回值   函数作为序列化返回   字符串。

     

调用脚本可以执行其他操作   线程脚本运行时的任务。   结果可能会在以后收集   当线程脚本结束时。“

答案 3 :(得分:0)

您还可以使用进程代替使用管道或套接字的线程来进行通信。

答案 4 :(得分:0)

多线程意味着同时执行多个任务或进程,我们可以通过使用以下代码在php中实现这一点,虽然没有直接的方法在php中实现多线程,但我们可以通过以下方式实现几乎相同的结果。

chdir(dirname(__FILE__));  //if you want to run this file as cron job
 for ($i = 0; $i < 2; $i += 1){
 exec("php test_1.php $i > test.txt &");
 //this will execute test_1.php and will leave this process executing in the background and will go         

 //to next iteration of the loop immediately without waiting the completion of the script in the   

 //test_1.php , $i  is passed as argument .

}

Test_1.php

$conn=mysql_connect($host,$user,$pass);
$db=mysql_select_db($db);
$i = $argv[1];  //this is the argument passed from index.php file
for($j = 0;$j<5000; $j ++)
{
mysql_query("insert  into  test   set

                id='$i',

                comment='test',

                datetime=NOW() ");

}

这将同时执行test_1.php两次,两个进程将同时在后台运行,这样就可以在php中实现多线程。

这家伙做得非常好Multithreading in php(死链接)

答案 5 :(得分:0)

虽然不是最好的解决方案,但使用VirtualBox(将所有CPU内核模拟为一个)然后将PHP放入VitualBox中的操作系统中,在计算一些大数据时,性能得到了很大改善(尽管您可能会失去64位性能和RAM)。然而,它适用于我想要完成的任务。

我们的想法是你必须效仿它。