Php,并不是真的为多线程做的,但是你有什么解决方法来处理php中的线程。
答案 0 :(得分:26)
有一些解决方案,从“嗯,只是好”到“睁开你的眼睛”。
答案 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)。然而,它适用于我想要完成的任务。
我们的想法是你必须效仿它。