Saya baru-baru ini membaca tentang pipa bernama, dan saya tidak bisa mengerti mengapa mereka ada.
Saya pernah membaca di suatu tempat bahwa menggunakan pipa bernama kurang memakan waktu daripada menggunakan file.
Kenapa begitu?
Pipa bernama juga harus disimpan dalam memori (dan mungkin ditukar, seperti file).
Sejauh yang saya bisa lihat, mereka harus mendapatkan inode yang harus dirujuk oleh direktori saat ini, seperti file. Juga, mereka harus dihapus oleh programmer, sama seperti file.
Jadi, di mana letak keuntungannya?
Jawaban:
Hampir semua yang ada di Linux dapat dianggap sebagai file , tetapi perbedaan utama antara file biasa dan pipa bernama adalah bahwa pipa bernama adalah contoh khusus dari file yang tidak memiliki konten pada sistem file.
Berikut ini kutipan dari
man fifo
:Jadi sebenarnya pipa bernama tidak melakukan apa-apa sampai beberapa proses membaca dan menulis padanya. Tidak membutuhkan ruang pada hard disk (kecuali sedikit informasi meta), tidak menggunakan CPU.
Anda dapat memeriksanya dengan melakukan ini:
Buat pipa bernama
Buka beberapa direktori, misalnya
/home/user/Documents
, dan gzip semua yang ada di dalamnya, menggunakan pipa bernama.Di sini Anda akan melihat PID dari proses gzip. Dalam contoh kita adalah 28584.
Sekarang periksa apa yang dilakukan PID ini
Anda akan melihat bahwa itu tidak menggunakan sumber daya . 0% penggunaan CPU, 0% penggunaan memori.
Verifikasi dugaan terkait penggunaan ruang file
Dan lagi
0
, tidak ada. Testpipe dapat digunakan lagi jika diperlukan.Jangan lupa untuk membunuh gzip, gunakan
kill -15 28584
. Dan menghapus pipa bernama kami menggunakanrm /tmp/testpipe
Contoh Penggunaan
Anda dapat mengarahkan ulang hampir semua menggunakan pipa bernama. Sebagai contoh, Anda dapat melihat proxy satu baris ini .
Juga di sini adalah satu lagi penjelasan bagus tentang penggunaan pipa bernama. Anda dapat mengkonfigurasi dua proses pada satu server untuk berkomunikasi menggunakan pipa bernama bukannya TCP / IP stack. Ini jauh lebih cepat, dan tidak memuat sumber daya jaringan. Misalnya Server Web Anda dapat berkomunikasi dengan database secara langsung menggunakan pipa bernama, daripada menggunakan
localhost
alamat atau mendengarkan beberapa port.sumber
Memang benar bahwa Anda tidak akan menggunakan memori sistem tetapi fakta bahwa Anda tidak menggunakan cpu dalam contoh Anda hanya karena Anda tidak membaca pipa sehingga prosesnya sedang menunggu.
Pertimbangkan contoh berikut:
Sekarang buka konsol baru dan jalankan:
Dan di konsol ketiga:
Jika Anda melihat arloji cmd (istilah kedua) ini akan menunjukkan peningkatan konsumsi cpu!
sumber
Berikut adalah kasus penggunaan di mana pipa bernama dapat menghemat banyak waktu dengan menghapus I / O.
Misalkan Anda memiliki BigFile, misalnya 10G.
Anda juga memiliki pemisahan BigFile ini dalam potongan 1G, BigFileSplit_01 hingga BigFile_Split_10.
Sekarang Anda memiliki keraguan tentang kebenaran BigFileSplit_05
Secara naif, tanpa pipa bernama, Anda akan membuat pemisahan baru dari BigFile dan membandingkan:
Dengan pipa bernama Anda akan melakukannya
Pada pandangan pertama itu mungkin tidak tampak perbedaan besar ... tetapi pada waktunya perbedaannya sangat besar!
Pilihan 1:
Pilihan 2:
Jadi pada dasarnya pipa bernama menyelamatkan Anda di sini membaca dan menulis 1G ditambah beberapa pembersihan filesystem (karena kami menulis apa-apa ke filesystem tetapi node fifo kosong).
Tidak melakukan I / O, terutama menulis, juga baik untuk menghindari keausan disk Anda. Ini bahkan lebih menarik ketika Anda bekerja dengan SSD karena mereka memiliki jumlah penulisan yang terbatas sebelum sel-sel mati.
(1) Jelas, opsi lain adalah membuat file sementara ke RAM, misalnya jika / tmp dipasang ke RAM (tmpfs). Namun demikian Anda akan dibatasi oleh ukuran disk RAM, sedangkan "trik pipa bernama" tidak memiliki batas.
sumber
Anda dapat membiarkan program tetap diam dan mendengarkan pipa bernama untuk beberapa acara luar. Segera setelah peristiwa luar terjadi (mis. Kedatangan beberapa data baru) ini dapat dideteksi oleh beberapa program lain yang pada gilirannya membuka pipa untuk menulis, menulis data acara yang relevan ke pipa. Ketika pernyataan penutupan dikeluarkan, program mendengarkan akan menerima aliran data melalui pipa melalui pernyataan baca, dan siap untuk memproses apa yang telah didapat. Jangan lupa untuk menutup pipa setelah membaca konten. Program mendengarkan juga dapat mengembalikan hasil pemrosesan melalui hal yang sama, atau melalui pipa bernama lain. Komunikasi antar-program semacam itu sangat nyaman di saat-saat tertentu.
sumber