Saya bingung tentang perbedaan atau keuntungan (jika ada) menjalankan serangkaian tugas di .sh
skrip menggunakan GNU parallel
Misalnya. Jawaban Ole Tange:
parallel ./pngout -s0 {} R{} ::: *.png
daripada mengatakan perulangan melalui mereka menempatkan mereka di latar belakang &
.
Misalnya. jawaban frostschutz:
#copied from the link for illustration
for stuff in things
do
( something
with
stuff ) &
done
wait # for all the something with stuff
Singkatnya, apakah mereka hanya berbeda secara sintaksis atau praktis? Dan jika praktis berbeda kapan saya harus menggunakan masing-masing?
Jawaban yang Diterima:
Menempatkan banyak pekerjaan di latar belakang adalah cara yang baik untuk menggunakan banyak inti dari satu mesin. parallel
namun, memungkinkan Anda untuk menyebarkan pekerjaan di beberapa server jaringan Anda. Dari man parallel
:
GNU parallel adalah alat shell untuk menjalankan pekerjaan secara paralel menggunakan
satu atau lebih komputer . Masukan tipikal adalah daftar
file, daftar host , daftar pengguna, daftar URL, atau daftar tabel.
Bahkan saat dijalankan di satu komputer, parallel
memberi Anda kendali yang jauh lebih besar atas bagaimana pekerjaan Anda diparalelkan. Ambil contoh ini dari man
halaman:
To convert *.wav to *.mp3 using LAME running one process per CPU core
run:
parallel lame {} -o {.}.mp3 ::: *.wav
Oke, Anda bisa melakukan hal yang sama dengan
for i in *wav; do lame "$i" -o "${i%.wav}.mp3" & done
Namun, itu lebih lama dan lebih rumit dan, yang lebih penting, akan meluncurkan pekerjaan sebanyak .wav
file. Jika Anda menjalankan ini pada beberapa ribu file, kemungkinan akan membuat laptop biasa bertekuk lutut. parallel
di sisi lain, akan meluncurkan satu pekerjaan per inti CPU dan menjaga semuanya tetap bagus dan rapi.
Pada dasarnya, parallel
menawarkan Anda kemampuan untuk menyesuaikan bagaimana pekerjaan Anda dijalankan dan berapa banyak sumber daya yang tersedia yang harus mereka gunakan. Jika Anda benar-benar ingin melihat kekuatan alat ini, bacalah manualnya atau, paling tidak, contoh yang ditawarkannya.
Latar belakang sederhana benar-benar tidak memiliki tingkat kecanggihan yang bisa dibandingkan dengan paralel. Adapun cara parallel
berbeda dari xargs
, kerumunan GNU memberikan perincian yang bagus di sini. Beberapa poin yang lebih menonjol adalah:
- xargs berurusan dengan karakter khusus (seperti spasi, ‘ dan “).
- xargs dapat menjalankan sejumlah tugas tertentu secara paralel, tetapi tidak memiliki dukungan untuk menjalankan tugas dengan jumlah inti CPU secara paralel.
- xargs tidak memiliki dukungan untuk mengelompokkan output, oleh karena itu output dapat berjalan bersama, mis. setengah baris pertama berasal dari satu proses dan setengah baris terakhir berasal dari proses lain.
- xargs tidak memiliki dukungan untuk menjaga urutan output, oleh karena itu jika menjalankan pekerjaan secara paralel menggunakan xargs, output dari pekerjaan kedua tidak dapat ditunda hingga pekerjaan pertama selesai.
- xargs tidak memiliki dukungan untuk menjalankan tugas di komputer jarak jauh.
- xargs tidak mendukung penggantian konteks, jadi Anda harus membuat argumen.