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 mengeksekusi pekerjaan secara paralel menggunakan satu atau lebih komputer . Input khas adalah daftar file, daftar host , daftar pengguna, daftar URL, atau daftar tabel.
Bahkan ketika berjalan di satu komputer, parallel
memberi Anda kontrol yang jauh lebih besar tentang 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
OK, Anda bisa melakukan hal yang sama dengannya
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 banyak pekerjaan karena ada .wav
file. Jika Anda menjalankan ini pada beberapa ribu file, kemungkinan akan membuat laptop normal 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 menyempurnakan 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-contoh yang ditawarkannya.
Latar belakang sederhana benar-benar tidak memiliki tingkat kecanggihan untuk dibandingkan dengan paralel. Adapun parallel
perbedaannya xargs
, kerumunan GNU memberikan rincian yang bagus di sini . Beberapa poin yang lebih menonjol adalah:
- xargs berurusan dengan buruk dengan karakter khusus (seperti spasi, 'dan ").
- xargs dapat menjalankan sejumlah pekerjaan secara paralel, tetapi tidak memiliki dukungan untuk menjalankan sejumlah pekerjaan cpu-core secara paralel.
- xargs tidak memiliki dukungan untuk pengelompokan output, oleh karena itu output dapat berjalan bersama, misalnya paruh pertama garis adalah dari satu proses dan bagian terakhir dari garis adalah 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 sampai pekerjaan pertama selesai.
- xargs tidak memiliki dukungan untuk menjalankan pekerjaan di komputer jarak jauh.
- xargs tidak memiliki dukungan untuk penggantian konteks, jadi Anda harus membuat argumen.
parallel
sintaksisnya, satu lagi merek baru keyboard-faceroll untuk dihafal. Tapi saya kira auto balancing lintas core / pekerjaan sepadan ...?sem
yang merupakan bagian dari paket Paralel GNU. Itu mungkin lebih cocok dengan persyaratan sintaks Anda.parallel
lebih kuat daripadaxargs
, tetapi perbandingan itu agak bias. Sebagai contoh,xargs
mendukung string yang diakhiri dengan null sebagai input untuk menghindari masalah dengan spasi dan kutipan, dan dapat juga-d
untuk ditiruparallel
(bahkan disebutkan dalam perbandingan!).xargs -I
adalah penggantian konteks yang cukup untuk sebagian besar kasus sederhana, dan saya biasanya tahu jumlah core pada mesin. Saya tidak pernah mengalami masalah dengan output yang tidak dikelompokkan.