Pipeline (software): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Ines (discussione | contributi)
mNessun oggetto della modifica
m v2.05 - Fixed using WP:WPCleaner (Wikilink uguali alla propria descrizione)
 
(42 versioni intermedie di 36 utenti non mostrate)
Riga 1:
{{F|sistema operativo|febbraio 2013}}
In [[informatica]], il concetto di '''pipeline''' (in inglese, tubatura -composta da più elementi collegati-, condotto) viene utilizzato indicare un insieme di [[componente software|componenti software]] tra loro collegati a cascata in modo che il risultato prodotto da uno degli elementi sia l'ingresso di quello immediatamente successivo. Le pipeline più semplici prevedono una semplice linea di componenti, mentre quelle più complesse possono prevedere "biforcazioni" (''[[muxer|muxers]]'' -elementi con più ingressi- o ''[[demuxer|demuxers]]'' -elementi con più uscite-).
[[File:Pipeline-it.svg|thumb|Una pipeline di tre programmi eseguiti all'interno di un terminale ([[Exempli gratia|e.g.]] bash)|300x300px]]
Una pipeline inizia con uno o più elementi ''[[source]]'' (che non hanno ingressi, ma solo uscite), i cui dati fluiscono attraverso tutti gli altri elementi intermedi (''muxers'', ''demuxers'', filtri -che manipolano questo flusso di dati- e convertitori -che modificano il formato del flusso di dati-) fino agli elementi ''[[sink]]'' (che non hanno uscite ma solo ingressi).
In [[informatica]], il concetto di '''pipeline''' (in [[lingua inglese|inglese]], tubatura -composta da più elementi collegati-, — o condotto) viene utilizzato per indicare un insieme di componenti [[componente software|componenti software]] collegati tra loro collegati ain cascata, in modo che il risultato prodotto da uno degli elementi ([[Output (informatica)|output]]) sia l'ingresso di quello immediatamente successivo. Le pipeline più semplici prevedono una semplice linea di componenti, mentre quelle più complesse possono prevedere "biforcazioni" (''[[muxer|muxersinput]]'' -elementi con più ingressi- o ''[[demuxer|demuxers]]'' -elementi con più uscite-).
 
== Descrizione ==
L'accezione più comune della parola pipeline indica un comando di ''[[shell]]'' complesso, in cui un programma ''source'' genera un flusso di dati testuali che si propagano attraverso le ''[[pipe#Funzione pipe nella Shell|pipe]]'' ("|") tramite una sequenza di [[Filtro (Unix)|filtri]], fino ai ''sink'' (che spesso sono [[file]], o il [[terminale (informatica)|terminale]]). Questi programmi sono collegati tra loro tramite l'operatore pipe, che in una riga di comando significa che lo standard output del programma a sinistra dell'operatore è passato allo standard input del programma alla sua destra.
Le ''pipeline'' più semplici prevedono una semplice linea di componenti, mentre quelle più complesse possono prevedere "biforcazioni" ([[multiplexer]] — elementi con più ingressi — o [[demultiplexer]] — elementi con più uscite).
Una ''pipeline'' inizia con uno o più elementi ''[[source]]sorgenti'' (che non hanno ingressi, ma solo uscite), i cui dati fluiscono attraverso tutti gli altri elementi intermedi (''muxers''multiplexer, ''demuxers''demultiplexer, filtri -che manipolano questo flusso di dati- e convertitori -che modificano il formato del flusso di dati-) fino agli elementi ''[[sink]]''destinatari (che non hanno uscite ma solo ingressi).
 
L'accezione più comune della parola ''pipeline'' indica un comando di ''[[Shell (informatica)|shell]]'' complessocomposito, in cui un programma ''source''sorgente genera un flusso di dati testuali che si propagano attraverso le ''[[pipe (informatica)#Funzione pipe nella Shell|pipe]]'' ("|") tramite una sequenza di [[Filtro (Unix)|filtri]], fino ai ''sinkdestinatari'' (che spesso sono [[file]], o il [[terminale (informatica)|terminale]]). Questi programmi sono collegati tra loro tramite l'operatore ''pipe'', che in una riga di comando significa che lo ''[[standard output]]'' del programma a sinistra dell'operatore èva passato allo ''[[standard input]]'' del programma alla sua destra.
A livello utente si incontra nell'uso della ''shell'', dove è spesso conveniente riutilizzare i dati uscenti di un programma come input di un altro, ad esempio per applicare dei [[Filtro (Unix)|filtri]] o per visualizzare e manipolare i risultati in un programma interattivo.
 
A livello utente si incontra nell'uso della ''shell'', dove è spesso conveniente riutilizzare i dati uscenti di un programma come dati in ingresso a un altro, ad esempio per applicare dei [[Filtro (Unix)|filtri]] o per visualizzare e manipolare i risultati in un programma interattivo. In molti sistemi, come i discendenti del [[MS-DOS|Microsoft DOS]] e di [[Unix]], l'operazione via ''shell'' è gestita anteponendo fra i programmiinterponendo una barra verticale ("|") fra le invocazioni dei due programmi.
 
== Pipeline inIn ambienti [[Unix]] ==
=== Esempi ===
Nei seguenti esempi di riga di comando lo ''standard output'' deldi un programma a sinistra dell'operatore per la ''pipe'' è passato allo ''standard input del programma'' alla sua destra.<syntaxhighlight lang="bash">cut -d : -f 1 /etc/passwd | grep foo</syntaxhighlight>trova tutti gli utenti in <code>/etc/passwd</code> che hanno la stringa <code>foo</code> all'interno del loro [[nome utente]]. Il comando [[Cut (Unix)|''cut'']] estrae il primo campo di ciascuna linea dal file <code>/etc/passwd</code> e la ''pipe'' passa <nowiki>l'</nowiki>output a ''[[grep]]'', che cerca le linee contenenti <code>foo</code> e le stampa sullo ''standard output''.
 
Un altro esempio di ''pipeline'', che visualizza sullasul consoleterminale i numeri da 1 a 13:
cut -d : -f 1 /etc/passwd | grep foo
 
<syntaxhighlight lang="bash">
trova tutti gli utenti in ''/etc/passwd'' che hanno la stringa ''"foo"'' all'interno del loro nome. Il comando '''cut''' prende il primo campo di ciascuna linea dal file ''/etc/passwd'' e la pipe passa l'output a '''[[grep]]''', che cerca le linee contenenti ''"foo"'' e le stampa su standard output.
while : ; do echo ; done | head -n 13 | nl -ba
</syntaxhighlight>
 
Spesso i filtri costituiscono gli elementi successivi al primo in una ''pipeline''.
Un altro esempio di pipeline, che visualizza sulla console i numeri da 1 a 13:
 
=== FineInizio della ''pipeline'' ===
while : ; do echo ; done | head -n 13 | nl -ba
Programmi che vengono spesso utilizzati per creare il flusso di dati da inviare ad una ''pipeline'':
* <code>[[Find (Unix)|find]]</code> (individua i file con certe caratteristiche)
* <code>[[Cat (Unix)|cat]]</code> (legge un file o un dispositivo)
* <code>[[tail]] -f</code> (legge le righe che vengono aggiunte ad un file)
 
=== Fine della ''pipeline'' ===
Spesso i filtri costituiscono gli elementi successivi al primo in una pipeline.
Una ''pipeline'' può terminare nei modi che seguono:
* scrivendo il risultato sul terminale;
* effettuando la [[redirezione]] dei dati su un [[file]];
* con un ''pager'' come ad esempio ''[[More (Unix)|more]]'' o ''[[Less (Unix)|less]]'', che permettono di leggere un file o un flusso di dati una pagina alla volta;
* con ''[[xargs]]'', che trasforma un flusso di dati in parametri sulla riga di comando.
 
=== InizioVoci dellacorrelate pipeline ===
* [[Filtro (Unix)]]
Programmi che vengono spesso utilizzati per creare il flusso di dati da inviare ad una pipeline:
* [[Pipe (informatica)]]
* [[find]] (individua i file con certe caratteristiche)
* [[Shell (informatica)]]
* [[cat]] (legge un file o un dispositivo)
* [[tail]] -f (legge le righe che vengono aggiunte ad un file)
 
== Collegamenti esterni ==
=== Fine della pipeline ===
* {{FOLDOC|pipe|pipe}}
Una pipeline termina stampando il risultato sul terminale, [[redirezione|redirigendolo]] su un [[file]], con un pager come [[more]] o [[less]], che permettono di leggere un file o un flusso di dati una pagina alla volta, o anche con [[xargs]], che trasforma un flusso di dati in argomenti sulla riga di comando
 
==Voci correlate==
* [[Filtro (Unix)]]
* [[pipe]]
* [[shell]]
 
{{Portale|informatica}}
[[Categoria:Sistemi POSIX]]
 
[[Categoria:Sistemi POSIXKernel]]
[[en:Pipeline (Unix)]]
[[ja:パイプ (コンピュータ)]]