GNU/Linux >> Belajar Linux >  >> Linux

Menjalankan Perintah Pipa Secara Paralel?

Pertimbangkan skenario berikut. Saya memiliki dua program A dan B. Program A menghasilkan baris string stdout sementara program B memproses baris dari stdin. Cara menggunakan kedua program ini tentunya:

[dilindungi email]:~$ A | B

Sekarang saya perhatikan bahwa ini hanya memakan satu inti; makanya saya bertanya-tanya:

Apakah program A dan B berbagi sumber daya komputasi yang sama? Jika demikian, apakah ada cara untuk menjalankan A dan B secara bersamaan?

Hal lain yang saya perhatikan adalah bahwa A berjalan jauh lebih cepat daripada B, oleh karena itu saya bertanya-tanya apakah entah bagaimana dapat menjalankan lebih banyak program B dan membiarkan mereka memproses jalur yang dihasilkan A secara paralel.

Artinya, A akan menampilkan baris-barisnya, dan akan ada N program B yang akan membaca baris-baris ini (siapa pun yang membacanya terlebih dahulu) memprosesnya dan mengeluarkannya di stdout.

Jadi pertanyaan terakhir saya adalah:

Apakah ada cara untuk menyalurkan output ke A di antara beberapa proses B tanpa harus memperhatikan kondisi balapan dan inkonsistensi lain yang berpotensi muncul?

Jawaban yang Diterima:

Masalah dengan split --filter adalah bahwa output dapat dicampur, sehingga Anda mendapatkan setengah baris dari proses 1 diikuti oleh setengah baris dari proses 2.

GNU Parallel menjamin tidak akan ada campur aduk.

Jadi anggaplah Anda ingin melakukan:

 A | B | C

Tetapi B itu sangat lambat, dan karenanya Anda ingin memparalelkannya. Kemudian Anda dapat melakukan:

A | parallel --pipe B | C

GNU Parallel secara default terbagi pada \n dan ukuran blok 1 MB. Ini dapat disesuaikan dengan –recend dan –block.

Anda dapat menemukan lebih banyak tentang GNU Parallel di:http://www.gnu.org/s/parallel/

Anda dapat menginstal GNU Paralel hanya dalam 10 detik dengan:

$ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
   fetch -o - http://pi.dk/3 ) > install.sh
$ sha1sum install.sh | grep 67bd7bc7dc20aff99eb8f1266574dadb
12345678 67bd7bc7 dc20aff9 9eb8f126 6574dadb
$ md5sum install.sh | grep b7a15cdbb07fb6e11b0338577bc1780f
b7a15cdb b07fb6e1 1b033857 7bc1780f
$ sha512sum install.sh | grep 186000b62b66969d7506ca4f885e0c80e02a22444
6f25960b d4b90cf6 ba5b76de c1acdf39 f3d24249 72930394 a4164351 93a7668d
21ff9839 6f920be5 186000b6 2b66969d 7506ca4f 885e0c80 e02a2244 40e8a43f
$ bash install.sh

Tonton video intro di http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1


Linux
  1. 5 perintah pemecahan masalah jaringan Linux

  2. Lembar contekan perintah IPtables

  3. Apakah Utilitas Linux Cerdas Saat Menjalankan Perintah Pipa?

  1. Bash Mana yang Dieksekusi?

  2. A sampai Z Perintah Linux

  3. Jalankan beberapa perintah paralel sekaligus di terminal yang sama

  1. 5 kesalahan pemula Linux

  2. 8 perintah Linux praktis favorit saya

  3. Skrip Bash memproses sejumlah perintah secara paralel