GNU/Linux >> Linux Esercitazione >  >> Linux

Le pipe Unix/Linux sono guidate dal produttore o dal consumatore?

Le pipe in Unix hanno un buffer, quindi anche se il processo del lato destro (RSP) non consuma alcun dato, il processo del lato sinistro (LSP) è in grado di produrre alcuni kilobyte prima del blocco.

Quindi, se il buffer si riempie, l'LSP viene infine bloccato. Quando l'RSP legge i dati, libera parte o tutto lo spazio del buffer e l'LSP riprende l'operazione.

Se invece di 2 processi ne hai 3, la situazione è più o meno la stessa:un producer più veloce viene bloccato da un consumer più lento. E ovviamente, un consumatore più veloce viene bloccato da un produttore più lento se la pipe si svuota:basti pensare a una shell interattiva, in attesa del produttore più lento di tutti:l'utente.

Ad esempio il seguente comando:

$ yes | cat | more

Dal more si blocca quando lo schermo è pieno, finché l'utente non preme un tasto, il cat il processo riempirà il suo buffer di output e andrà in stallo, quindi il yes il processo riempirà il suo buffer e si bloccherà. Tutto in attesa che l'utente continui, come dovrebbe essere.

PS:Un fatto interessante è:cosa succede quando more il processo finisce? bene, il lato destro di quel tubo è chiuso, quindi il cat il processo otterrà un SIGPIPE segnale (se mai scriverà di nuovo nella pipa, e lo farà) e morirà. Lo stesso accadrà al yes processi. Tutti i processi muoiono, come dovrebbe essere.


A ha una pipe verso B e B ha una pipe verso C. Ogni pipe ha un buffer; Blocco B e C se tentano di leggere e non è disponibile alcun input (la fine del flusso conta come input). A e B si bloccano se hanno output da scrivere, ma il buffer della pipe è pieno.

Tutti e tre i processi vengono eseguiti contemporaneamente, utilizzando quanta più CPU possibile. Il sistema operativo li blocca nella chiamata di sistema di lettura/scrittura secondo necessità se il pipe buffer è rispettivamente esaurito/pieno.

Quindi, sono guidati sia dal consumatore che dal produttore, cioè il tasso è il minimo sia del tasso di consumo che del tasso di produzione. Se il consumatore è più veloce, la performance è guidata dal produttore, e vv.


Linux
  1. Processi UNIX / Linux:funzione C fork()

  2. UNIX/Linux:Come cambiare la gentilezza (priorità) di un processo

  3. Linux è un Unix?

  4. Come vedere il processo creato da un utente specifico in Unix/linux

  5. Le variabili di ambiente sono visibili agli utenti non privilegiati su Linux?

Cosa sono le pipe in Linux? Come funziona il reindirizzamento dei tubi?

Linux vs Unix

UNIX / Linux:3 modi per inviare segnali ai processi

UNIX / Linux:7 esempi pratici di comandi PS per il monitoraggio dei processi

I thread del kernel di Linux sono davvero processi del kernel?

I diversi kernel Linux/Unix sono intercambiabili?