Open Source im professionellen Einsatz

Auf den Punkt gebracht

Leserbriefe

Haben Sie Anregungen, Statements oder Kommentare? Dann schreiben Sie an [redaktion@linux-magazin.de]. Die Redaktion behält es sich vor, die Zuschriften und Leserbriefe zu kürzen. Sie veröffentlicht alle Beiträge mit Namen, sofern der Autor nicht ausdrücklich Anonymität wünscht.

Parallelarbeit 1

02/09, S. 70: Der Artikel über die Parallelisierung mittels Bash-Skripten war sehr interessant. Jedoch möchte ich kurz darauf hinweisen, dass die Umsetzung sehr umständlich ist. Die Bash stellt eigene Funktionen für eine Jobverarbeitung zur Verfügung, um dasselbe Verhalten mit weniger Aufwand zu erreichen.

Angeregt durch die Idee versuchte ich mich an einem Skript (Listing 1), das sich genauso benutzen lässt wie das im Artikel. Die Kommunikation mit den Workern habe ich durch den direkten Aufruf des Jobs ersetzt.

Lars Täuber, per Mail

Listing 1:
Parallelisierung

01 #!/bin/bash
02 
03 : ${_cmd:="echo"}
04 : ${PMAX:=`ls -1d /sys/devices/system/cpu/cpu* | wc -l`}
05 
06 dispatchWork() {
07   while read -r -u 0 LINE
08   do
09     while [ $(jobs -rp | wc -l) -ge $PMAX ]
10     do
11         sleep 1
12     done
13     eval $_cmd "$LINE" &
14   done
15   wait
16 }

Parallelarbeit 2

02/09, S. 70: Als Alternative zur der im Beitrag "Parallelarbeit" vorgestellten Lösung lässt sich »xargs« einsetzen:

find . -name '*.pdf' | xargs -n 1 -P 4  pdf2ps

Dieses Beispiel erzeugt aus allen PDF-Dokumenten Postscript-Dateien. Der Schalter »-n 1« sorgt dafür, dass immer genau ein Argument an das nachfolgende Programm weitergegeben wird. Der Schalter »-P 4« lässt maximal vier Prozesse zu. Ein kleines Wrapper-Skript passt die Prozessanzahl wie vorgeschlagen an die CPU-Anzahl an und überreicht die Dateinamen und den auszuführenden Befehl als Parameter.

Eine weitere Möglichkeit ist die Verwendung von Xjobs [http://www.maier-komor.de/xjobs.html] Auch hier reicht eine Zeile:

find . -name '*.pdf' | xjobs -j 4 -- pdf2ps

Fritz Mehner, per E-Mail

Mehrere Prozesse landen deshalb in der Regel auf verschiedenen CPUs eines Mehrprozessorsystems und laufen damit parallel ab, weil der CPU-Scheduler um einen Lastausgleich bemüht ist.

Allerdings können alle Ansätze, die allein darauf vertrauen, nicht garantieren, dass der Scheduler, der möglicherweise sehr viele Prozesse verwaltet, nicht doch mehrere oder gar alle der eigentlich zu parallelisierenden Tasks einer CPU zuordnet. Wollte man die gleichmäßige Verteilung tatsächlich erzwingen, böte sich dafür das Linux Utility »taskset« an, das es erlaubt, ausdrücklich die CPU zu bestimmen, auf der ein bestimmter Prozess laufen soll. (Jens-Christoph Brendel)

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook