Php multithread [duplicate]
Php, isn't really made for multithread but do you have any workarround to deal with threads in php.
There are a few solutions, varying from "Hmmm, just about OK" through to "Poke out your eyes".
- Write your multithreaded code as a PHP extension. Probably the most supported, but you need to write in C (or another language supported for extensions).
- Spawn child processes onto the underlying OS, and read/write to their input/output with standard file handles. See popen for one route in, or PCNTL. Reasonable, and you can use PHP from the command line.
- Make other HTTP requests to yourself via CURL or similar, thus piggybacking on your web servers multi-processing capacity. Keeps all your code "web like", but runs the risk of irate support developers tracking you down and breaking thumbs.
Since this is a top result on google, php has a new extension, pthreads: http://www.php.net/manual/en/book.pthreads.php specifically for this.
Check the PCNTL library. It may help you to emulate some thread behavior.
Also there's this class:
"This class can emulate the execution of program threads using separate HTTP requests to the same script.
It establishes an HTTP connection to the same Web server to execute the same PHP script. It sends a request passing the name a function to execute and an argument to be passed to that function.
The requested script executes some code that detects the thread execution request and calls the specified function.
When the thread request script ends, the return values of the called function is returned as a serialized string.
The calling script can execute other tasks while the thread script runs. The results may be collected later when the thread script ends."
You can also use processes instead of threads using pipes or sockets to communicate them.
Although not the best solution, using VirtualBox (which emulates all CPU cores as one) and then putting a PHP into an OS in VitualBox, has given me a lot of improvement in a performance while computing some big-data numbers (although you may lose the 64-bit performance and RAM). Nevertheless, it worked for what I wanted to accomplish.
The idea is that you have to emulate it.
Multithreading means performing multiple tasks or processes simultaneously, we can achieve this in php by using following code,although there is no direct way to achieve multithreading in php but we can achieve almost same results by following way.
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() ");
}
This will execute test_1.php two times simultaneously and both process will run in the background simultaneously ,so in this way you can achieve multithreading in php.
This guy done really good work Multithreading in php (Dead link)
精彩评论