2009-10-07 19 views
19

Php, non è veramente fatto per il multithread, ma hai qualche workarround per gestire i thread in php.Multithread di php

+0

Si prega di vedere questa risposta dettagliata a una domanda simile: http://stackoverflow.com/questions/209774/does-php-have-threading/14201579#14201579 –

+0

Prova pthread, alcuni link sono https: // GitHub. com/krakjoe/pthreads http://pthreads.org/ http://docs.php.net/manual/en/book.pthreads.php Download da qui - http://pecl.php.net/package/pthreads – Sauryabhatt

risposta

26

ci sono alcune soluzioni, variando da" Hmmm, tutto sommato niente male" fino al 'Poke i tuoi occhi'.

  1. scrivere il codice multithread come PHP extension. Probabilmente il più supportato, ma è necessario scrivere in C (o in un'altra lingua supportata per le estensioni).
  2. Elaborazione di processi figlio sul sistema operativo sottostante e lettura/scrittura sull'input/output con handle di file standard. Vedere popen per un instradamento o PCNTL. Ragionevole, e puoi usare PHP dalla riga di comando.
  3. Inviate altre richieste HTTP a voi stessi tramite CURL o simili, quindi portateli sulla capacità di elaborazione multipla dei vostri server Web. Mantiene tutto il tuo codice "simile al web", ma corre il rischio che gli sviluppatori di supporto irate ti rintracciano e rompano i pollici.
6

Verificare PCNTL library. Potrebbe aiutarti a emulare il comportamento di alcuni thread.

Inoltre c'è this class:

"Questa classe può emulare l'esecuzione di fili programma utilizzando HTTP separata richieste per lo stesso copione

Si stabilisce una connessione HTTP al stesso server Web. per eseguire lo stesso script PHP che invia il nome di una funzione per eseguire e un argomento da passare a tale funzione .

Lo script richiesto esegue qualche codice che rileva la richiesta di esecuzione del thread e chiama la funzione specificata.

Quando lo script richiesta filo termina, i valori restituiti della funzione chiamata viene restituito come stringa serializzata.

Lo script di chiamata può eseguire altre attività mentre viene eseguito lo script di thread. I risultati possono essere raccolti successivamente quando lo script filo termina. "

+0

è una specie di AJAX lato server? –

0

È anche possibile utilizzare i processi invece di fili utilizzando tubi o socket per comunicare loro.

0

Multithreading significa eseguire più attività o processi contemporaneamente, possiamo ottenere questo in php utilizzando il seguente codice, anche se non esiste un modo diretto per ottenere il multithreading in php ma possiamo ottenere quasi gli stessi risultati seguendo la strada.

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

} 

Questo eseguirà test_1.php due volte simultaneamente ed entrambe processo verrà eseguito in background contemporaneamente, in questo modo è possibile ottenere il multithreading in php.

Questo ragazzo fatto davvero un buon lavoro Multithreading in php (Dead link)

0

Anche se non è la soluzione migliore, utilizzando VirtualBox (che emula tutti i core della CPU come uno) e poi mettere un PHP in un sistema operativo in VitualBox, mi ha dato un notevole miglioramento delle prestazioni durante il calcolo di alcuni numeri di grandi numeri (anche se potresti perdere le prestazioni a 64 bit e la RAM). Tuttavia, ha funzionato per ciò che volevo realizzare.

L'idea è che devi emularlo.