threads thread parallel not found child php multithreading

thread - Php multiproceso



popen php (6)

Esta pregunta ya tiene una respuesta aquí:

Php, en realidad no está hecho para multihilo pero tienes algún workarround para tratar con threads en php.


También puede usar procesos en lugar de hilos usando tuberías o conectores para comunicarlos.


Verifique la biblioteca PCNTL . Puede ayudarte a emular algún comportamiento de subprocesos.

También hay esta clase :

"Esta clase puede emular la ejecución de subprocesos de programa utilizando solicitudes HTTP separadas para la misma secuencia de comandos.

Establece una conexión HTTP al mismo servidor web para ejecutar el mismo script PHP. Envía una solicitud que pasa el nombre, una función para ejecutar y un argumento para pasar a esa función.

El script solicitado ejecuta algún código que detecta la solicitud de ejecución del hilo y llama a la función especificada.

Cuando finaliza el script de solicitud de subproceso, los valores devueltos de la función llamada se devuelven como una cadena serializada.

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



Aunque no es la mejor solución, el uso de VirtualBox (que emula todos los núcleos de la CPU como uno solo) y luego poner un PHP en un sistema operativo en VitualBox, me ha dado una gran mejora en el rendimiento al computar 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 emularlo.


Multithreading significa realizar múltiples tareas o procesos simultáneamente, podemos lograr esto en php usando el siguiente código, aunque no hay una manera directa de lograr multihilo 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 procesos se ejecutarán en segundo plano al mismo tiempo, por lo que de esta forma se puede lograr el multihilo en php.

Este tipo hizo un trabajo realmente bueno Multithreading en php (Enlace muerto)


Hay algunas soluciones, que van desde "Hmmm, casi correcto" hasta "Quítese los ojos".

  1. Escribe tu código multiproceso como una extensión de PHP . Probablemente sea el más compatible, pero debe escribir en C (u otro idioma admitido para 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 de CURL o similar, lo que redundará en la capacidad de multiprocesamiento de sus 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.