2009-10-07 14 views
19

PHP, ist nicht wirklich für Multithread gemacht, aber Sie haben keine Workaround, um mit Threads in PHP umzugehen.PHP Multithread

+0

Bitte diese ausführliche Antwort auf eine ähnliche Frage sehen: http://stackoverflow.com/questions/209774/does-php-have-threading/14201579#14201579 –

+0

PTHREAD Versuchen Sie, sind einige Links https: // GitHub. com/krakjoe/pthreads http://pthreads.org/ http://docs.php.net/manual/en/book.pthreads.php Download von hier - http://pecl.php.net/package/pthreads – Sauryabhatt

Antwort

26

Es gibt ein paar Lösungen, variierend von“ Hmmm, nur über OK“bis hin zu‚Ihre Augen Poke out‘.

  1. schreiben Sie multithreaded Code als PHP extension. die wohl unterstützt, aber Sie müssen in C (oder eine andere Sprache für Erweiterungen unterstützt) schreiben.
  2. Spawn Kind verarbeitet auf dem zugrunde liegenden Betriebssystem und lesen/schreiben auf ihre Eingabe/Ausgabe mit Standard-Datei behandelt. Siehe popen für eine Route in oder PCNTL. Angemessen, und Sie können PHP über die Befehlszeile verwenden.
  3. Machen Sie andere HTTP-Anfragen an sich selbst unter CURL oder ähnlich, und tragen Sie so die Multi-Processing-Kapazität Ihres Web-Servers auf. Hält Ihren gesamten Code "web-like", birgt aber das Risiko, dass zornige Support-Entwickler Sie aufspüren und die Daumen brechen.
6

Überprüfen Sie die PCNTL library. Es kann Ihnen helfen, etwas Thread-Verhalten zu emulieren.

Auch gibt es this class:

„Diese Klasse umfasst die Ausführung von Programm-Threads mit separaten HTTP Anforderungen an derselben Skript emulieren kann

Er stellt eine HTTP-Verbindung zu der gleichen Web-Server. Um das gleiche PHP-Skript auszuführen, sendet es eine Anfrage übergibt den Namen eine Funktion zum Ausführen und ein Argument an die Funktion übergeben werden.

Das angeforderte Skript führt einen Code aus, der die Threadausführung Anforderung erkennt und die angegebene -Funktion aufruft.

Wenn das Threadanforderungsskript beendet wird, werden die Rückgabewerte der aufgerufenen -Funktion als serialisierte -Zeichenfolge zurückgegeben.

Das aufrufende Skript kann andere Aufgaben ausführen, während das Thread-Skript ausgeführt wird. Die Ergebnisse können später gesammelt werden, wenn der Thread-Skript endet. „

+0

ist das eine Art serverseitiger AJAX? –

0

Sie auch Prozesse statt Fäden mit Rohren oder Buchsen ihnen kommunizieren können.

0

Multithreading bedeutet mehrere Aufgaben oder Prozesse gleichzeitig auszuführen, können wir dies in PHP erreichen, indem Sie folgenden Code verwenden, obwohl es keinen direkten Weg gibt, Multithreading in PHP zu erreichen, aber wir können fast die gleichen Ergebnisse erreichen.

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() "); 

} 

Dies wird ausgeführt test_1.php zweimal gleichzeitig und beide Verfahren wird im Hintergrund gleichzeitig laufen, so auf diese Weise Sie Multithreading in php erreichen können.

Dieser Kerl getan wirklich gute Arbeit Multithreading in php (Toter Link)

0

Obwohl es nicht die beste Lösung, mit VirtualBox (die alle CPU-Kerne als eine emuliert) und dann eine PHP in ein OS in VitualBox setzen, mir gegeben hat, Es gibt eine Menge Verbesserung bei der Leistung, während Sie einige große Datenzahlen berechnen (obwohl Sie die 64-Bit-Leistung und den Arbeitsspeicher verlieren könnten). Trotzdem funktionierte es für das, was ich erreichen wollte.

Die Idee ist, dass Sie es emulieren müssen.