Szeretnék sok file-t feldolgozni, de a szűk keresztmetszetnek a file-ok egymás utáni olvasása bizonyul. Viszont ha külön processzoron tudna futni minden file, persze meghatározott maximális processzort használva, akkor lényegesen felgyorsíthatnám a végrehajtást.
Bash-ben kéne ezt elkövetni.
Van e erre valami szép megoldás?
Hogy tudnám egy egyes feladatokat egy közös csatornába irányítani?
- 1117 megtekintés
Hozzászólások
http://code.google.com/p/ppss/
Ubuntu 10.04, Thinkpad x61s
- A hozzászóláshoz be kell jelentkezni
Ma már kicsit szebben írnám meg, de évek óta jól működik :D
- A hozzászóláshoz be kell jelentkezni
Ha valóban a fájlok _olvasása_ vagyis az IO a szűk keresztmetszet, akkor a többszálúsítás nem sokat segít.
Ha úgy érted, hogy maga a fájlok beolvasása elhanyagolható időt vesz igénybe, de a feldolgozásuk már jelentőset, és szeretnéd, hogy a több fájl feldolgozása fusson egymás mellett, arra meg nem elég egy egyszerű
$ időigényes_feladat fájl1 & időigényes_feladat fájl2 & időigényes_feladat fájl3 &
?
Ha meg az kell, hogy valami figyelje, hogy épp hány processz fut, és ha kevesebb, mint a magok száma, akkor mindig indítson újabbakat, arra a kollégák írtak javaslatokat.
- A hozzászóláshoz be kell jelentkezni
A sok file egymás utáni beolvasása a szűk keresztmetszet. (kb 10-20 ezer file)
Ha nem egy file feldolgozása folyna egyidőben, hanem minden processzoron egy, akkor sokkal hamarabb ledarálná a feladatot, talán még akkor is, ha egy procin 2-3 file feldolgozás folyna egyszerre.
Igazából a közös kimenet ami gondot okoz, de max lementem az eredményeket külön egy közös azonosítóval, majd a sok kicsi kimenetet egyesítem.
A legtöbb művelet grep vagy awk, így sokat gyorsulhat.
- A hozzászóláshoz be kell jelentkezni