Design Pattern #6- Producer/Consumer

L’applicazione è formata da due cicli paralleli, il primo ciclo chiamato Produttore ha quindi il compito di produrre dati per secondo ciclo consumatore.
producer consumer labview

Nello scorso articolo abbiamo visto la QSM, oggi vedremo la Producer/Consumer Design Pattern

Il Producer/Consumer Design Pattern nasce dall’esigenza di disaccoppiare la produzione dalla consumazione di dati, garantendo massima efficienza e scalabilità anche in applicazioni real-time complesse come l’acquisizione dati industriale, il controllo di processo o la gestione di interfacce utente responsive.

Questo disaccoppiamento utilizzando come mezzo di comunicazione una FIFO, permette di risolvere il problema di dover gestire lo scambio dei dati tra un processo produttore veloce, a un processo consumatore lento.

  • Il producer genera dati e li inserisce nel buffer
  • Il consumer preleva i dati dal buffer e li elabora
  • Il buffer è la memoria di accumulo per lo scambio

Quindi il design pattern separa due processi rendendo autonomi e favoranedo lo scambio tra processi a differenti velocità senza perdita di dati.

Per compensare la differenza di velocità, i dati vengono memorizzati in un Buffer FIFO (Firts In Firts Out), che regola il flusso di dati.

Quando esistono più processi in esecuzione a velocità diverse, la comunicazione bufferizzata tra i processi è estremamente efficace.

Esempio Acquisizione e Salvataggio

Un’ applicazione è composta da due processi, il primo acquisisce dati per il secondo a una velocità doppia, verrà utilizzata l’architettura Producer/Consumer.

Nota: Il ciclo consumatore si ferma per Errore (perde la reference della coda), questo è possibile perchè il produttore si ferma con pulsante di stop, poi chiude e rilascia la reference. Il dequeue va in errore perchè perde il riferimento al file.

Se pensiamo alla state machine viste negli articoli precedenti, possiamo gestire gli stati con messaggi inviati sul consumatore, che ha una struttura case per selezionare il caso richiesto dal messaggio.

L’approccio del modello produttore / consumatore a questa applicazione consiste nel produrre i messaggi per la macchina a stati consumatore disaccoppiando l’esecuzione della macchina a stati in due processori di elaborazione.

Per il caso Exit, verrà accodato il messaggio di uscita nel loop producer, e il consumer eseguirà poi l’evento associato ad esso.

La tecnica del producer/consumer è utilizzata anche per disaccoppiare la gestione degli eventi UI, verso una macchina a stati consumatore che elabora i messaggi, rendendo responsiva la GUI.

Il pattern producer/consumer è alla base del framework QMH che utilizza macchine a stati con un enumeratoreo stringa per il messaggio e un variant o stringa per i parametri.

Immagine di Davide Oratelli
Davide Oratelli
Ciao, sono Davide Oratelli, sviluppatore LabVIEW enthusiast, certificato CPI e CLD. In Bytelabs mi occupo di formazione e sviluppo software, supportando aziende e centri di ricerca nel migliorare i processi di test e misura. Se questo articolo ti è piaciuto, condividilo su LinkedIn… e se vuoi parlarne, scrivimi direttamente lì!

Potrebbe interessarti anche:

La digitalizzazione dei processi di taratura consente tracciabilità, automazione e
La produzione di dispositivi elettromeccanici medicali richiede collaudi rigorosi, laboratori
Parlaci del tuo progetto o della tua idea.

Contattaci

Phone: +39 0532 458971
Email: info@bytelabs.it
Via Cento, 8D 44124 Ferrara
CF/PI/VAT: IT 02051510382

Follow Us!