mkfifo - Disk G / Ç gerçekten oluyor mu?


10

2 başvurum var:

  • Yapımcı (N bulut sunucusu)
  • Tüketici (1 örnek)

Şu anda üreticilerin ara sonuçlarını yazıyorum ve daha sonra tüketici bu dosyaları diskten okuyor ve nihai sonuç üretiyor .

Üreticilerin çıktılarını doğrudan tüketiciye "aktararak" bu G / Ç'yi en aza indirmek istiyorum.

Ben adlandırılmış borular (mkfifo) ve bir sonraki örnek burada geldi . Bu harika görünüyor, ancak bunun gerçekte nasıl uygulandığını belirleyemediğim şey nedir? FIFO kuyruğu sadece bir dosyada mı arabelleğe alınıyor? Eğer öyleyse, bu muhtemelen bana yardımcı olmaz. İçeriğin tamamen diski kullanmadan "bellek üzerinden" akışını istiyorum. Belki bu süreçler boyunca mümkün değildir?

Yanıtlar:


10

Disk yok / yok (belki de fifo dosyasını açmak için dosya sisteminde gezinirken.)

Gönderen (7) kılavuz sayfasında Fifo Linux :

FIFO özel dosyası (adlandırılmış yöneltme), dosya sisteminin bir parçası olarak erişilmesi dışında, yöneltmeye benzer. [...] İşlemler FIFO üzerinden veri alışverişi yaparken, çekirdek tüm verileri dosya sistemine yazmadan dahili olarak geçirir. Bu nedenle, FIFO özel dosyasının dosya sisteminde herhangi bir içeriği yoktur; dosya sistemi girdisi yalnızca bir referans noktası olarak işlev görür, böylece süreçler dosya sisteminde bir ad kullanarak boruya erişebilir.


Mükemmel. Mkfifo için man sayfasını okudum ama "fifo" ile ilgili bir sayfa aramayı düşünmedim - Teşekkürler!
Jmoney38

3

Sonuçlarınızın gerçekten disk desteklenip desteklenmediği önemli değildir, çünkü yeterli bellek varsa önbelleğe alınır ve gerçek disk GÇ gerçekleştirilmez. Aksine, bellek destekliyse ve yeterli bellek yoksa, diske değiştirilebilir.

Tahmin edersem, pipetin aslında bellek tabanlı olduğunu söyleyebilirim, ancak daha sonra bu sadece kuyruğa alınan verilerin yeniden başlatmalar arasında korunup korunmadığını değiştirmelidir.

Dikkat etmeniz gereken şey, birden fazla üreticiniz olduğundan, yazılarınızın sıraya girmemesi için atomik olması gerektiğidir. Bkz man 7 pipeBir yazma atomik olmasını sağlamak konusunda ayrıntılı bilgi için.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.