Una CPU con varios núcleos, PHP y la computación paralela

2021-11-14 - Categorías: General / PHP

Este es un codekata de copia y pega en PHP para procesar lotes de información particionados y repartidos entre varios núcleos de una misma CPU utilizando los conceptos de computación paralela. Es decir, si tenemos un proceso pesado que corre de forma iterativa, y se puede dividir en lotes, entonces se puede procesar en paralelo para aumentar la velocidad.

Esta división y procesado en varios subprocesos de forma simultanea, se puede hacer fácilmente en PHP usando las funciones nativas de pcntl.

Show me the code, el código fuente

<?php

/**
 * Testing paralell computing..
 */
const MAXCHILDS = 7;

while (true) {
    echo '>>> Starting a batch..'.PHP_EOL;

    // Launch the children..
    $childs = 0;
    for ($i = 0; $i < MAXCHILDS; ++$i) {
        $pid = pcntl_fork();

        if (-1 == $pid) {
            exit('could not fork');
        } elseif ($pid) {
            // Parent..
            ++$childs;
            echo "I'm the parent of $childs children.".PHP_EOL;
        } else {
            // Child..
            $start_time = time();
            $wait_time = rand(3, 10);
            while (true) {
                if (time() - $start_time > $wait_time) {
                    break;
                }
            }
            echo "Bye bye from child $i.".PHP_EOL;
            exit;
        }
    }

    // Wait the children to finish..
    while ($childs > 0) {
        pcntl_wait($status);
        --$childs;
    }

    echo 'All childs ended!'.PHP_EOL;
    echo 'Ending a batch..'.PHP_EOL;
    sleep(2);
}

Me remito a la documentación oficial para más información:
https://www.php.net/manual/es/function.pcntl-fork.php

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

© 2021 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.