Canonada (informàtica)

De la Viquipèdia, l'enciclopèdia lliure

En informàtica, una canonada (pipeline en anglès) consisteix en una cadena de processos connectats de manera que la sortida de cada element de la cadena és l'entrada del pròxim. Permeten la comunicació i sincronització entre processos. És comú l'ús de buffer de dades entre elements consecutius.

La comunicació per mitjà de canonades es basa en la interacció productor/consumidor, els processos productors (aquells que envien dades) es comuniquen amb els processos consumidors (que reben dades) seguint un ordre FIFO. Una vegada que el procés consumidor rep una dada, aquest s'elimina de la canonada.

Les canonades (pipes) estan implementades en forma molt eficient en els sistemes operatius multitasca, iniciant tots els processos a la vegada, i atenent automàticament els requeriments de lectura de dades per a cada procés quan les dades són escrits pel procés anterior. D'aquesta manera el planificador de curt termini donarà l'ús de la CPU a cada procés a mesura que pugui executar minimitzant els temps morts.

Per millorar el rendiment, la majoria dels sistemes operatius implementen les canonades amb buffers, el que permet al procés proveïdor generar més dades que el que el procés consumidor pot atendre immediatament.

Podem distingir dos tipus de canonades:

  • Canonada sense nom: Les canonades sense nom tenen associat un fitxer en memòria principal, per tant, són temporals i s'eliminen quan no s'estan utilitzant ni per productors ni per consumidors. Permeten la comunicació entre el procés que crea una via ii processos fills després de les creació de la canonada.
  • Canonada amb nom: La seva diferència respecte a les canonades sense nom és que la llera es crea al sistema de fitxers, i per tant no tenen caràcter temporal. És mitjançant crides al sistema ( open, close, read i write) com la resta de fitxers del sistema. Permeten la comunicació entre els processos que utilitzen aquesta canonada, encara que no hi hagi una connexió jeràrquica entre ells.

Vegeu també[modifica]

Enllaços externs[modifica]