Esempio di produttore / consumatore di Qt comune: qual è il punto del multithreading qui?

2

Mentre cercavo di capire come implementare una coda Producer / Consumer in Qt, mi sono imbattuto in diverse risposte SO, blog e siti che collegavano questo sito:

Stai sbagliando ...

Ho capito il senso di questo sito, ma di solito le persone si riferiscono all'esempio di codice che si trova nel blog di riferimento:

Threading without the headache

Il blog ha un piccolo esempio di codice allegato, il cui nucleo è pubblicato da KornP in questa risposta SO:

Qt moveToThread () vs chiama il nuovo thread quando usiamo ogni

Quindi, se osservi più da vicino, abbiamo il seguente comportamento:

  1. Il produttore P produce un oggetto, mentre il consumatore C attende che gli eventi appaiano nel suo ciclo degli eventi.
  2. P inoltra i dati prodotti attraverso un segnale e torna al ciclo di eventi inattivo.
  3. C riceve il segnale nel suo ciclo degli eventi e consuma i dati.
  4. C emette un segnale sul thread del produttore e torna al ciclo di loop inattivo.
  5. Ricomincia da 1.

In altre parole: mentre P sta producendo, C non fa nulla e mentre C sta producendo, P non fa nulla.

Che senso ha avere un produttore e un consumatore come questo in due thread diversi?
Un singolo thread non sarebbe esattamente uguale?

    
posta Tim Meyer 15.09.2011 - 10:43
fonte

1 risposta

2

in questo semplice caso, sì, non c'è alcun beneficio reale nell'usare thread oltre a mostrare come funzionano i thread. È comunque interessante: il ciclo degli eventi di P continua a funzionare mentre il lavoro effettivo è fatto da C. Questo è ciò che vuoi per mantenere l'interfaccia utente (che P potrebbe benissimo essere) reattiva.

Le cose diventano più interessanti con esempi concreti. Supponiamo che C raccolga i dati memorizzandoli in un buffer e li scarichi in un file quando il buffer ha abbastanza dati. Questo dumping potrebbe richiedere un po ', ma P può semplicemente continuare a fare affari mettendo i dati in coda senza notare che C è occupato o senza alcun rallentamento.

    
risposta data 15.09.2011 - 14:07
fonte

Leggi altre domande sui tag