The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Quiq::Parallel - Parallele Verarbeitung

BASE CLASS

Quiq::Object

EXAMPLE

Minimales Veranschaulichungsbeispiel: Lasse 50 Prozesse für jeweils eine Sekunde schlafen. Die Ausführungsdauer beträgt ungefähr 50/Anzahl CPUs Sekunden, da immer Anzahl CPUs Prozesse parallel ausgeführt werden.

    Quiq::Parallel->runArray([1..50],sub {
        my ($elem,$i) = @_;
        sleep 1;
        return;
    });

Bei großen Datenmengen oder wenn die Gesamtmenge vorab nicht bekannt ist, bietet sich die Methode $class->"runFetch"() an. Hier ein Beispiel mit einer unbekannt großen Datenbank-Selektion:

    my $cur = $db->select("
            <SELECT Statement>
        ",
        -cursor => 1,
    );
    
    Quiq::Parallel->runFetch(sub {
            my $i = shift;
            return $cur->fetch;
        },
        sub {
            my ($row,$i) = @_;
    
            <$row verarbeiten>
    
            return;
        },
    );

METHODS

Parallele Berechnung

runArray() - Führe Subroutine parallel über Arrayelementen aus

Synopsis

    $class->runArray(\@elements,$sub,@opt);

Arguments

@elements

Die Elemente, auf denen die Berechnung einzeln durchgeführt wird.

$sub

Die Subroutine, die für jedes Element in @elements ausgeführt wird.

Options

-maxProcesses => $n (Default: Anzahl der CPUs des Rechners)

Die maximale Anzahl parallel laufender Prozesse.

-progressMeter => $bool (Default: 0)

Zeige Fortschrittsanzeige an.

Returns

nichts

runFetch() - Führe Subroutine parallel über gefetchten Elementen aus

Synopsis

    $class->runFetch($fetchSub,$execSub,@opt);

Arguments

$fetchSub

Subroutine, die das nächste gefetchte Element liefert:

    $e = $fetchSub->($i); # $i-ter Fetch-Aufruf
$execSub

Subroutine, die für jedes gefetchte Element ausgeführt wird.

Options

-maxFetches => $n (Default: 0)

Gesamtanzahl der Fetches. 0 bedeutet, die Gesamtanzahl der Fetches ist (vorab) nicht bekannt.

-maxProcesses => $n (Default: Anzahl der CPUs des Rechners)

Die maximale Anzahl parallel laufender Prozesse.

-progressMeter => $bool (Default: 0)

Zeige Fortschrittsanzeige an.

Returns

nichts

Description

Verarbeite die Elemente, die von Subroutine $fetchSub geliefert werden, mit der Subroutine $execSub mit parallel laufenden Prozessen. Per Default wird für die Anzahl der parallelen Prozesse die Anzahl der CPUs des ausführenden Rechners gewählt. Mit der Option -maxProcesses kann eine abweichende Anzahl gewählt werden.

Tip: Die Anzahl der vorhandenen CPUs liefert die Methode

    $n = Quiq::System->numberOfCpus;

VERSION

1.131

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2019 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.