2012-10-09 16 views
6

PHP aparentemente ahora admite una clase Thread. También hay una clase Mutex y Cond. Sin embargo, es necesario compilarlo con las buenas opciones y agregar una extensión PECL para tenerlo.Cómo usar PHP // Hilo // Mutex // Cond

¿Hay un buen tutorial por dónde empezar? Algo que muestra claramente el uso justo de cada Clase/Método.

Simplemente no sé cómo manejar estas clases. Necesitaría algunos ejemplos concretos de hacer cosas muy simples que exhiban tantos métodos como sea posible.

Gracias.

+0

No ha sido lanzado aún. Los desarrolladores de PHP probablemente podrían ayudarlo más. – Ryan

Respuesta

14

Se ha lanzado como está disponible en pecl, descargas ventanas en las páginas de GitHub ... Git (fuente) si es posible, un código más reciente ...

http://pthreads.org contiene algo más de información, y la partida de los ejemplos carpeta también ...

Si usted es más específico en lo que tiene que hacer lo que puedo dar una respuesta precisa, no dude en ponerse en contacto conmigo directamente ...

lo siento por la falta de documentación, soy Desarrollar agresivamente pthreads en el poco tiempo que tengo alrededor del trabajo, fue escrito mientras estaba de vacaciones del trabajo y Ahora estoy de vuelta en el trabajo: la documentación se actualizará tanto como sea posible tan pronto como encuentre el tiempo.

Enlazar es usualmente algo complicado, pero no es necesario ... alguna vez se ha visto un grupo de subprocesos que tenga menos de 100 líneas ?? https://github.com/krakjoe/pthreads/blob/master/examples/Pooling.php ... ¡hay uno!

Usted no necesita saber acerca de las condiciones o exclusión mutua para operar hilos en PHP, pthreads incluye peasy fácil todo ...

saltar a bordo, sin lugar a dudas, lo haré perfecta que ...

+0

Eso fue totalmente lo que busqué, gracias. No dudaré en contactarlo tan pronto como sea necesario. – dader

+1

¿Funciona pthread dentro de apache? si es así, ¿debería tomar mpm-prefork, o mpm-worker? – dader

+0

Funciona en todos los entornos SAPI, haga su elección. –

1

Enhebrar no es fácil, en cualquier idioma. Toma una línea de pensamiento diferente (no lineal). Como lo que mencionaste no está disponible en ninguna versión de PHP lanzada, te recomendaría jugar con la funcionalidad pctnl y shmop. Específicamente pcntl_fork. Ambos llevan un tiempo y son compatibles. Es multi-procesamiento y no está enhebrado, pero puede lograr lo que estás buscando. Pero el enhebrado es más eficiente.

Normalmente, utilizaría bifurcar un proceso principal para verificar el trabajo, delegarlo en un proceso bifurcado y luego buscar más trabajo mientras el proceso secundario hace el trabajo. El proceso principal puede verificar el estado de los procesos secundarios. Por ejemplo, puede asegurarse de que solo bifurca una cierta cantidad de procesos hijos y espera que se complete uno antes de bifurcar otro.

He bifurcado hasta 500 procesos en los que la carga de la CPU llegó a ser alta. El proceso principal verificaría la carga del sistema y no se movería más si la carga era demasiado alta.

Si realmente lo necesita, podría utilizar la memoria compartida (funciones shmop) con bifurcación para obtener gran parte de la funcionalidad que obtendría con el enhebrado.

+1

gracias por su respuesta. Ya jugué con pcntl_fork, y hace parte del trabajo, pero me parece que el enhebrado me ahorraría la sobrecarga de la comunicación entre procesos (suponiendo que el enhebrado proporciona grandes facilidades con respecto al intercambio de variables entre los diferentes hilos, ¿me equivoco? ?).Especialmente, creo, cuando uso objetos inmutables (de nuevo, ¿estoy equivocado?). – dader

+0

Tiene razón, los hilos le ahorran gastos generales. Puede hacer "compartir variables" con las funciones de memoria compartida sin enhebrar. Honestamente, si está buscando hacerlo y le preocupa la sobrecarga de los procesos, probablemente debería estar buscando un idioma además de PHP. –

+0

Estoy totalmente de acuerdo contigo, PHP está lejos de ser una opción para esta tarea. – dader