mkfifo - Apakah disk I / O benar-benar terjadi?


10

Saya punya 2 aplikasi:

  • Produser (N instance)
  • Konsumen (1 contoh)

Saat ini saya menuliskan hasil antara dari produsen, dan kemudian konsumen membaca file-file ini dari disk dan menghasilkan hasil akhir .

Saya ingin meminimalkan I / O ini dengan "mengalirkan" output dari produsen langsung ke konsumen.

Saya menemukan pipa bernama (mkfifo) dan contoh berikutnya di sini . Ini terlihat hebat, tetapi apa yang saya tidak dapat menentukan adalah bagaimana ini sebenarnya diterapkan? Apakah antrian FIFO baru saja disangga melalui file? Jika demikian, itu mungkin tidak akan membantu saya. Saya ingin konten mengalir "melalui memori" sepenuhnya tanpa menggunakan disk. Mungkin ini tidak mungkin di seluruh proses?

Jawaban:


10

Tidak ada disk i / o (kecuali mungkin ketika menavigasi melalui sistem file untuk membuka file fifo.)

Dari halaman manual Linux fifo (7) :

File khusus FIFO (pipa bernama) mirip dengan pipa, kecuali itu diakses sebagai bagian dari sistem file. [...] Ketika proses bertukar data melalui FIFO, kernel meneruskan semua data secara internal tanpa menuliskannya ke sistem file. Dengan demikian, file khusus FIFO tidak memiliki konten pada sistem file; entri sistem file hanya berfungsi sebagai titik referensi sehingga proses dapat mengakses pipa menggunakan nama dalam sistem file.


Sempurna. Saya membaca halaman manual untuk mkfifo, tetapi tidak berpikir untuk mencari halaman tentang "fifo" - Terima kasih!
Jmoney38

3

Tidak masalah apakah hasil Anda benar-benar didukung disk atau tidak, karena jika tersedia cukup memori maka akan di-cache dan tidak ada disk IO aktual yang dilakukan. Sebaliknya, jika didukung memori dan tidak tersedia cukup memori, dapat ditukar dengan disk.

Jika saya menebak, saya akan mengatakan bahwa pipa sebenarnya berbasis memori, tetapi kemudian, ini hanya akan mengubah apakah data yang antri dipertahankan antara reboot.

Yang harus Anda urus adalah karena Anda memiliki banyak produsen, tulisan Anda harus bersifat atomik sehingga tidak saling terkait dalam antrian. Lihat man 7 pipeuntuk perincian tentang cara memastikan bahwa penulisan adalah atom.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.