it-swarm.it

Quando dovresti usare il multithreading? E il multi threading sarebbe utile se i diversi thread eseguissero attività reciprocamente indipendenti?

Queste erano le uniche due domande a cui non ho potuto rispondere nell'intervista che mi hanno respinto la scorsa notte.

51
GrowinMan

D: Quando utilizzare il multithreading?

A: "La tua domanda è molto ampia. Esistono pochi sistemi non banali in cui la funzionalità può essere soddisfatta in modo semplice, rapido e affidabile con un solo thread. Ad esempio: [scegli un sistema tipico che l'azienda target vende e scegli un abbina aspetti della sua funzione che sarebbero meglio esclusi - CPU pesante, comunicazioni, multiutente - scegli qualcosa di probabile e spiegalo].

D: Il multithreading sarebbe utile se i diversi thread eseguissero attività reciprocamente indipendenti?

A: "Dipende da cosa intendi per" eseguire attività ". Il multithreading sarebbe sicuramente utile se i thread elaborassero dati reciprocamente indipendenti in modo simultaneo - riduce i requisiti per blocchi e la probabilità di deadlock aumenta in modo super-lineare con il numero di blocchi. OTOH, non ci sono problemi con i thread che eseguono lo stesso codice, questo è sicuro e molto comune. "

Rgds, Martin

22
Martin James

È necessario utilizzare il multithreading quando si desidera eseguire operazioni pesanti senza "bloccare" il flusso.
Esempio in UI in cui si esegue un'elaborazione pesante in un thread in background ma l'interfaccia utente è ancora attiva.

Se i thread eseguono attività che si escludono a vicenda, è il migliore in quanto non sono previsti costi generali per la sincronizzazione tra i thread necessari

13
Cratylus

Il multithreading è un modo per introdurre parallelità nel programma. In ogni caso, se ci possono essere percorsi paralleli (parti che non dipendono dal risultato di un'altra parte) nel programma, l'uso può farne uso.

Specialmente con tutte queste macchine multi-core oggi, questa è una caratteristica che si dovrebbe sfruttare.

Alcuni esempi potrebbero essere elaborazione di dati di grandi dimensioni in cui è possibile dividerlo in blocchi e farlo in più thread, elaborazione di file, l'I/O di lunga durata funziona come il trasferimento di dati di rete eccetera.

Alla tua seconda domanda, sarebbe meglio se i compiti fossero reciprocamente indipendenti - ragioni

  • nessun dato condiviso significa nessuna contestazione
  • non è necessaria alcuna elaborazione ordinata (dipendenza), quindi ogni thread può funzionare quando dispone di risorse
  • più facile da implementare
8
Nrj

Dovresti assolutamente utilizzare il multithreading nelle applicazioni GUI quando invochi attività che richiedono tempo dal ciclo degli eventi principale. Lo stesso vale per l'applicazione server che potrebbe bloccarsi durante l'esecuzione dell'I/O.

Per la seconda domanda, di solito è sì quando si dispone di una macchina con più core della CPU. In questo caso, queste attività indipendenti possono essere eseguite in parallelo.

7
JooMing

È possibile utilizzare il multithreading se le attività possono essere suddivise che possono essere eseguite in parallelo. Come produrre e consumare, Convalida e salva, Leggi e Convalida.

Per la seconda domanda, Sì, è utile creare un programma in Multi threading se eseguono attività indipendenti.

5
java_mouse

In generale, il multithreading viene utilizzato nei casi in cui il tempo di esecuzione è limitato/strozzato dalla CP rispetto ad altre aree come IO. La seconda domanda è davvero abbastanza soggettiva alla circostanza. Ad esempio, se si escludono a vicenda ma entrambi eseguono operazioni di I/O pesanti, è possibile che non si ottenga necessariamente un grande guadagno.

3
Mike Kwan

Questo articolo fornisce ottime ragioni: https://marcja.wordpress.com/2007/04/06/four-reasons-to-use-multithreading/

Riassumendo, i motivi sono:

  • Mantieni il tuo programma reattivo.
  • Fai un uso migliore della tua CPU. La CPU può essere bloccata da IO o altre cose. Durante l'attesa, perché non lasciare che altri thread la utilizzino
  • È possibile programmare più thread su più core della CPU
  • Alcuni problemi devono naturalmente essere risolti con il multi-threading. Tale soluzione può semplificare il tuo codice.
2
bolei

Quando dovresti usare il multithreading?

Il multithreading è un processo di esecuzione di più thread contemporaneamente. È necessario utilizzare il multithreading quando è possibile eseguire più operazioni insieme in modo da risparmiare tempo.

Il multithreading sarebbe utile se i diversi thread eseguissero attività reciprocamente indipendenti?

di solito è sì. Il multithreading sarebbe generalmente utile se i diversi thread eseguono attività reciprocamente indipendenti in modo da non influire su altri thread se si verificano eccezioni in un singolo thread.

1
rashedcs

Il multithreading viene utilizzato quando possiamo dividere il nostro lavoro in più parti indipendenti. Ad esempio, supponiamo di dover eseguire una query di database complessa per il recupero dei dati e se è possibile dividere quella query in query indipendenti, allora sarà meglio se si assegna un thread a ciascuna query ed si esegue tutto in parallelo. In questo modo, l'output del risultato finale sarà più veloce. Ancora una volta, questo è un esempio quando si ha la leva per eseguire query multiple sul database.

E per rispondere alla tua seconda domanda, è meglio disporre di thread per attività indipendenti. Altrimenti, dovrai occuparti della sincronizzazione, delle variabili globali, ecc.

1
Prince