GNU/Linux >> Belajar Linux >  >> Linux

Apakah produsen pipa Unix/Linux atau digerakkan oleh konsumen?

Pipa di Unix memiliki buffer, jadi meskipun proses sisi kanan (RSP) tidak mengonsumsi data apa pun, proses sisi kiri (LSP) dapat menghasilkan beberapa kilobyte sebelum memblokir.

Kemudian, jika buffer penuh, LSP akhirnya diblokir. Saat RSP membaca data, RSP membebaskan sebagian atau seluruh ruang buffer dan LSP melanjutkan operasi.

Jika alih-alih 2 proses Anda memiliki 3, situasinya kurang lebih sama:produsen yang lebih cepat diblokir oleh konsumen yang lebih lambat. Dan jelas, konsumen yang lebih cepat diblokir oleh produsen yang lebih lambat jika pipa kosong:pikirkan saja shell interaktif, menunggu produsen yang paling lambat:pengguna.

Misalnya perintah berikut:

$ yes | cat | more

Sejak more memblokir saat layar penuh, hingga pengguna menekan tombol, cat proses akan mengisi buffer dan kios keluarannya, lalu yes proses akan mengisi buffer dan juga stall. Semuanya menunggu pengguna untuk melanjutkan, sebagaimana mestinya.

PS:Sebagai fakta yang menarik adalah:apa yang terjadi ketika more proses berakhir? nah, sisi kanan pipa itu ditutup, jadi cat proses akan mendapatkan SIGPIPE sinyal (jika pernah menulis lagi di pipa, dan itu akan) dan akan mati. Hal yang sama akan terjadi pada yes proses. Semua proses mati, sebagaimana mestinya.


A memiliki pipa ke B, dan B memiliki pipa ke C. Setiap pipa memiliki penyangga; B dan C memblokir jika mereka mencoba membaca, dan tidak ada input yang tersedia (akhir aliran dihitung sebagai input). Blok A dan B jika mereka memiliki output untuk ditulis, tetapi buffer pipa penuh.

Ketiga proses berjalan bersamaan, menggunakan CPU sebanyak mungkin. OS memblokirnya dalam panggilan sistem baca/tulis seperlunya jika masing-masing buffer pipa habis/penuh.

Jadi, mereka digerakkan oleh konsumen dan produsen, yaitu, kurs adalah min dari kurs konsumsi dan kurs produksi. Jika konsumen lebih cepat, performa didorong oleh produsen, dan vv.


Linux
  1. Proses UNIX / Linux:C fork() Fungsi

  2. UNIX / Linux :Apa itu Shell? Apa Shells yang berbeda?

  3. Apakah Linux itu Unix?

  1. Komunikasi antar-proses di Linux:Menggunakan pipa dan antrian pesan

  2. Linux – Apakah Linux Sebuah Unix?

  3. Apakah utas kernel Linux benar-benar proses kernel?

  1. Mengapa Tautan Keras Ke Direktori Tidak Diizinkan Di Unix/linux?

  2. Linux – Log Utas Sebelumnya Yang Sekarang Ditutup?

  3. Linux – Apakah Kernel Linux/unix yang Berbeda Dapat Dipertukarkan?