2009-10-07 16 views
19

Php, en realidad no está hecho para multihilo, pero ¿tiene algún workarround para tratar con hilos en php.Php multithread

+0

Consulte esta respuesta detallada a una pregunta similar: http://stackoverflow.com/questions/209774/does-php-have-threading/14201579#14201579 –

+0

Pruebe PTHREAD, algunos enlaces son https: // github. com/krakjoe/pthreads http://pthreads.org/ http://docs.php.net/manual/en/book.pthreads.php Descargar desde aquí - http://pecl.php.net/package/pthreads – Sauryabhatt

Respuesta

26

Hay algunas soluciones, variando de" Hmmm, simplemente bien" a través de 'empujar hacia fuera sus ojos'.

  1. escribir el código multiproceso como PHP extension. Probablemente el más apoyado, pero que necesita para escribir en C (o cualquier otro lenguaje soportado por extensiones).
  2. Spawn hijo procesa en el SO subyacente y lee/escribe en su entrada/salida con identificadores de archivo estándar. Ver popen para una ruta en, o PCNTL. Razonable, y puede usar PHP desde la línea de comando.
  3. Realice otras solicitudes HTTP a usted mismo a través del CURL o similar, lo que permite aprovechar la capacidad de multiprocesamiento de los servidores web. Mantiene todo su código "similar a la web", pero corre el riesgo de que los desarrolladores de asistencia furiosa lo rastreen y rompan pulgares.
6

Compruebe el PCNTL library. Puede ayudarte a emular algún comportamiento de subprocesos.

También hay this class:

"Esta clase puede emular la ejecución de hilos de programa usando HTTP independiente peticiones al mismo guión

Se establece una conexión HTTP con el mismo servidor Web. para ejecutar el mismo script PHP . Envía una solicitud pasando el nombre de una función para ejecutar y un argumento para pasar a esa función .

La secuencia de comandos solicitada ejecuta un código que detecta la ejecución de subproceso y llama a la función especificada.

Cuando termina la secuencia de comandos request hilo, los valores de retorno de la llamada función se devuelve como un cadena serializada.

El script de llamada puede ejecutar otras tareas mientras se ejecuta el script del hilo. Los resultados pueden ser recogidos más tarde cuando termina la secuencia de comandos hilo. "

+0

¿es este un tipo de servidor AJAX? –

0

También puede utilizar procesos en lugar de hilos que utilizan tubos o sockets para comunicarse ellos.

0

Multithreading significa realizar múltiples tareas o procesos simultáneamente, podemos lograr esto en php usando el siguiente código, aunque no hay una forma directa de lograr multithreading en php pero podemos lograr casi los mismos resultados siguiendo el camino.

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

} 

Esto ejecutará test_1.php dos veces al mismo tiempo y ambos proceso se ejecutará en segundo plano al mismo tiempo, por lo que de esta manera se puede lograr multihilo en php.

Este tipo hecho muy buen trabajo Multithreading in php (enlace no válido)

0

Aunque no es la mejor solución, utilizando VirtualBox (que emula todos los núcleos de la CPU como uno) y luego poner un PHP en un sistema operativo en VitualBox, me ha dado una gran mejora en el rendimiento mientras se computan algunos números de big data (aunque puede perder el rendimiento de 64 bits y la RAM). Sin embargo, funcionó para lo que yo quería lograr.

La idea es que tienes que emularla.