GNU/Linux >> Znalost Linux >  >> Linux

Jsou trubky Unix/Linux řízeny výrobcem nebo spotřebitelem?

Pipe v Unixu mají vyrovnávací paměť, takže i když proces na pravé straně (RSP) nespotřebovává žádná data, proces na levé straně (LSP) je schopen před zablokováním vyprodukovat několik kilobajtů.

Pokud se pak vyrovnávací paměť zaplní, LSP je nakonec zablokován. Když RSP čte data, uvolní část nebo celý prostor vyrovnávací paměti a LSP obnoví operaci.

Pokud místo 2 procesů máte 3, je situace víceméně stejná:rychlejšího výrobce blokuje pomalejší spotřebitel. A je zřejmé, že rychlejší spotřebitel je zablokován pomalejším výrobcem, pokud se potrubí vyprázdní:jen si představte interaktivní shell, který čeká na nejpomalejšího výrobce ze všech:na uživatele.

Například následující příkaz:

$ yes | cat | more

Od more blokuje, když je obrazovka plná, dokud uživatel nestiskne klávesu cat proces zaplní výstupní vyrovnávací paměť a zastaví se, pak yes proces zaplní svůj buffer a také se zastaví. Vše čeká na to, až uživatel bude pokračovat, jak má být.

PS:Zajímavým faktem je:co se stane, když more proces končí? no, pravá strana té roury je uzavřená, takže cat proces dostane SIGPIPE signál (pokud ještě někdy zapíše do potrubí, a bude) a zemře. Totéž se stane s yes proces. Všechny procesy umírají, jak by měly být.


A má potrubí do B a B má potrubí do C. Každé potrubí má vyrovnávací paměť; B a C blokují, pokud se pokusí číst a není k dispozici žádný vstup (konec proudu se počítá jako vstup). Bloky A a B, pokud mají výstup pro zápis, ale vyrovnávací paměť roury je plná.

Všechny tři procesy běží souběžně a využívají tolik CPU, kolik mohou. Operační systém je podle potřeby zablokuje v systémovém volání pro čtení/zápis, pokud je vyrovnávací paměť potrubí vyčerpána/plná.

Takže jsou poháněny jak spotřebitelem, tak výrobcem, to znamená, že míra je minimální mírou spotřeby i rychlosti produkce. Pokud je spotřebitel rychlejší, výkon řídí výrobce a vv.


Linux
  1. UNIX / Linux Procesy:C fork() Funkce

  2. UNIX / Linux:Co je to Shell? Jaké jsou různé Shelly?

  3. Jak zobrazit proces vytvořený konkrétním uživatelem v Unixu/linuxu

  1. Meziprocesová komunikace v Linuxu:Použití kanálů a front zpráv

  2. Linux – Je Linux Unix?

  3. Jsou různá jádra Linux/Unix zaměnitelná?

  1. Linux – protokol minulých vláken, která jsou nyní uzavřena?

  2. Linux – Jsou různá jádra Linux/unix zaměnitelná?

  3. Přehled procesu UNIX (uvnitř procesu Linux a typy procesů)