Umieszczenie wielu zadań w tle to dobry sposób na użycie wielu rdzeni pojedynczej maszyny. parallel
pozwala jednak rozłożyć zadania na wiele serwerów w sieci. Od man parallel
:
GNU równoległe to narzędzie powłoki do równoległego wykonywania zadań za pomocą jednego lub więcej komputerów . Typowe dane wejściowe to lista plików, lista hostów , lista użytkowników, lista adresów URL lub lista tabel.
Nawet jeśli działa na jednym komputerze, parallel
daje znacznie większą kontrolę nad sposobem równoległego wykonywania zadań. Weź ten przykład ze man
strony:
To convert *.wav to *.mp3 using LAME running one process per CPU core
run:
parallel lame {} -o {.}.mp3 ::: *.wav
OK, możesz zrobić to samo z
for i in *wav; do lame "$i" -o "${i%.wav}.mp3" & done
Jest to jednak dłuższe i bardziej kłopotliwe, a co ważniejsze, uruchomi tyle zadań, ile jest .wav
plików. Jeśli uruchomisz to na kilku tysiącach plików, prawdopodobnie zwali zwykłego laptopa na kolana. parallel
z drugiej strony, uruchomi jedno zadanie na rdzeń procesora i utrzyma wszystko w porządku.
Zasadniczo parallel
oferuje możliwość dostrajania sposobu wykonywania zadań i ilości dostępnych zasobów, z których powinni korzystać. Jeśli naprawdę chcesz zobaczyć moc tego narzędzia, zapoznaj się z jego instrukcją lub przynajmniej z przykładami, które oferuje.
Proste tło naprawdę nie ma poziomu zaawansowania porównywalnego z równoległym. Jeśli chodzi o sposób parallel
różni się od xargs
, GNU tłum dać podział piękny tutaj . Niektóre bardziej istotne punkty to:
- xargs źle radzi sobie ze znakami specjalnymi (takimi jak spacja, „i”).
- xargs może uruchamiać określoną liczbę zadań równolegle, ale nie obsługuje równoległego uruchamiania zadań z liczbą rdzeni procesora.
- xargs nie obsługuje grupowania danych wyjściowych, dlatego dane wyjściowe mogą działać razem, np. pierwsza połowa linii pochodzi z jednego procesu, a ostatnia połowa linii pochodzi z innego procesu.
- xargs nie obsługuje utrzymywania kolejności danych wyjściowych, dlatego jeśli równoległe uruchamianie zadań za pomocą xargs nie jest możliwe odłożenie wyjścia drugiego zadania do czasu wykonania pierwszego zadania.
- xargs nie obsługuje uruchamiania zadań na komputerach zdalnych.
- xargs nie obsługuje zamiany kontekstu, więc będziesz musiał utworzyć argumenty.
parallel
składni, kolejnej nowej marki klawiatury do zapamiętania. Ale chyba automatyczne równoważenie rdzeni / zadań jest tego warte ...?sem
która część pakietu GNU Parallel. To może lepiej pasować do twoich wymagań dotyczących składni.parallel
ma większą mocxargs
, ale to porównanie jest raczej stronnicze. Na przykładxargs
obsługuje ciągi zakończone znakiem null jako dane wejściowe, aby uniknąć problemów ze spacjami i cudzysłowami, a także może-d
emulowaćparallel
(nawet wspomniane w porównaniu!).xargs -I
jest wystarczającym zamiennikiem kontekstu dla najprostszych przypadków i zwykle znam liczbę rdzeni na maszynie. Nigdy nie spotkałem się z problemem z niezgrupowanym wyjściem.