Rastreador multi-hilo, multi-curl en PHP

Hola a todos una vez más!

Necesitamos ayuda para desarrollar e implementar una funcionalidad de múltiples rizos en nuestro rastreador. Tenemos una gran variedad de "enlaces para escanear" y los lanzamos con un Foreach.

Usemos algún pseudo código para entender la lógica:

    1) While ($links_to_be_scanned > 0).
    2) Foreach ($links_to_be_scanned as $link_to_be_scanned).
    3) Scan_the_link() and run some other functions.
    4) Extract the new links from the xdom.
    5) Push the new links into $links_to_be_scanned.
    5) Push the current link into $links_already_scanned.
    6) Remove the current link from $links_to_be_scanned.

Ahora, necesitamos definir un número máximo de conexiones paralelas y poder ejecutar este proceso para cada enlace en paralelo.

Entiendo que vamos a tener que crear $ links_being_scanned o algún tipo de cola.

Realmente no estoy seguro de cómo abordar este problema para ser honesto,Si alguien pudiera proporcionar algún fragmento o idea para resolverlo, sería muy apreciado.

¡Gracias por adelantado! Chris

Extendido:

Acabo de darme cuenta de que no es la parte de enrollamiento múltiple la parte difícil, sino la cantidad de operaciones realizadas con cada enlace después de la solicitud.

Incluso después del muticurl, eventualmente tendría que encontrar una manera de ejecutar todas estas operaciones en paralelo. Todo el algoritmo descrito a continuación tendría que ejecutarse en paralelo.

Así que ahora repensando, tendríamos que hacer algo como esto:

  While (There's links to be scanned)
  Foreach ($Link_to_scann as $link)
  If (There's less than 10 scanners running)
  Launch_a_new_scanner($link)
  Remove the link from $links_to_be_scanned array
  Push the link into $links_on_queue array
  Endif;

Y cada escáner sí (esto debería ejecutarse en paralelo):

  Create an object with the given link
  Send a curl request to the given link
  Create a dom and an Xdom with the response body
  Perform other operations over the response body
  Remove the link from the $links_on_queue array
  Push the link into the $links_already_scanned array

¿Supongo que podríamos abordar esto creando un nuevo archivo PHP con el algoritmo de escáner y usando pcntl_fork () para cada proceso paralelo?

Ya que incluso usando el enrollamiento múltiple, eventualmente tendría que esperar en bucle en una estructura regular de foreach para los otros procesos.

Supongo que tendría que abordar esto utilizando fsockopen o pcntl_fork.

¡Las sugerencias, comentarios, soluciones parciales e incluso una "buena suerte" serán más que apreciadas!

¡Muchas gracias!