2009-04-30 7 views
24

Qual è la differenza tra threading e parallelismo?Threading vs parallelismo, come si differenziano?

Quale è il vantaggio rispetto all'altro?

+4

Come si differenziano auto e guida? Il threading è l'atto di usare thread, il parallelismo è quando qualcosa corre in parallelo. Il modo più comune per far funzionare le cose in parallelo è usare i thread. – jalf

risposta

27

Daniel Moth (a former coworker of mine)- Threading/Concurrency vs Parallelism l'articolo spiega tutto.

Citato:

Per sfruttare più core dei software, in definitiva fili devono essere utilizzati. A causa di questo fatto, alcuni sviluppatori cadono in la trappola di equiparare il multithreading al parallelismo. Questo non è preciso ... Si possono avere multithreading su una singola macchina di base, ma si può avere solo il parallelismo su una macchina multicore

Il test rapido: Se su una singola macchina di base che si sta utilizzando fili e si ha perfettamente senso per il tuo scenario, quindi non stai "facendo il parallelismo", stai solo facendo il multithreading.

+3

Buon articolo! Potrebbe essere utile aggiungere un breve riassunto o una citazione qui, per proteggersi dal link rot. –

3

Threading è una tecnologia, il parallelismo è un paradigma che può essere implementato usando threading (ma potrebbe altrettanto facilmente essere fatto utilizzando thread singoli su più processori)

1

Come si fa a definire "parallelismo"? Il multithreading è un'implementazione concreta del concetto di esecuzione parallela del programma.

L'articolo collegato a RichardOD sembra riguardare principalmente se i thread vengono effettivamente eseguiti in parallelo su una macchina per calcestruzzo.

Tuttavia, la tua domanda sembra vedere il multithreading e il parallelismo come opposti. Intendi forse programmi che utilizzano più processi anziché più thread? In questo caso, le differenze sono:

  • I thread sono molto più economici da creare rispetto ai processi. Questo è il motivo per cui l'utilizzo di thread piuttosto che di processi ha comportato un'enorme accelerazione nelle applicazioni Web: si chiamava "FastCGI".
  • Più thread sulla stessa macchina hanno accesso alla memoria condivisa. Ciò rende la comunicazione tra thread molto più semplice, ma anche molto pericolosa (è facile creare bug come condizioni di gara difficili da diagnosticare e risolvere).
3

Il threading si riferisce di solito a più processi che lavorano contemporaneamente su una singola CPU (beh, in realtà non si pensa che lo facciano ma passano molto velocemente tra di loro).

Il parallelismo sta avendo più processi che lavorano contemporaneamente su più CPU.

Entrambi hanno i loro pro e contro pesantemente in base allo scheduler utilizzato dal sistema operativo. Di solito il costo di calcolo della creazione di un thread è molto più basso, quindi genera un processo su un'altra CPU, tuttavia avere una CPU "intera" aumenta la velocità complessiva di quel processo. Ma poi di nuovo se quel processo ha bisogno di comunicare con un altro processo su un'altra CPU, è necessario risolvere il problema di IPC (inter process communication) che potrebbe essere un sovraccarico tale che è meglio usare semplicemente un thread sulla stessa CPU.

La maggior parte del sistema operativo è a conoscenza di più CPU/core e può utilizzarli, ma ciò rende lo scheduler solitamente piuttosto complesso.

Se la sta programmando in un linguaggio che utilizza una VM (virtual machine), essere consapevoli del fatto che hanno bisogno di implementare il proprio scheduler (se non del tutto). Python ad esempio usa un GIL, il che dice praticamente che tutto ciò che gira su quella VM rimane sempre sulla stessa CPU. Sebbene alcuni sistemi operativi siano in grado di migrare un processo pesante verso un'altra CPU che al momento non è così impegnata, il che significa ovviamente che l'intero processo deve essere messo in pausa mentre lo fa.

Alcuni sistemi operativi come DragonFlyBSD prendono un approccio completamente diverso per la pianificazione, allora ciò che in questo momento è l'approccio 'standard'.

penso che questa risposta si dà abbastanza parole chiave per cercare ulteriori informazioni :-)

1

Threading è il parallelismo di un uomo povero.

EDIT: Per essere più precisi:

Threading non ha nulla a che fare con il parallelismo e saggio versa. Il threading fa pensare che alcuni processi funzionino in parallelo. Tuttavia, questo non rende i processi a completi TUTTE le loro azioni più velocemente in totale.

+1

(-1) A. Ogni strumento ha il suo posto. B.Hai qualcosa per eseguire il backup di questo? – DevinB

+0

Ho appena risposto alla domanda dell'argomento. Che domanda è - così è la risposta. – Thevs

+0

Per coloro che desiderano una discussione estesa - iniziamo con http://www.prodata.lt/EN/Programming/OPU_computing_model.pdf. – Thevs

4

parallelismo è una tecnica generale di utilizzare più di un flusso di istruzioni per completare un calcolo. L'aspetto critico di tutte le tecniche parallele è la comunicazione tra flussi per collaborare a una risposta finale.

Il threading è un'implementazione specifica del parallelismo. Ad ogni flusso di istruzioni viene assegnato il proprio stack per tenere un registro delle variabili locali e delle chiamate di funzione e comunica con gli altri flussi implicitamente dalla memoria condivisa.

Un esempio potrebbe essere quello di avere un thread semplicemente in coda richieste del disco e passarlo a un thread di lavoro, parallelizzazione efficace del disco e della CPU. Il metodo tubi UNIX tradizionale è quella di suddividerle in due programmi completi, dire "gatto" e grep nel comando:

cat /var/log/Xorg.0.log | grep "EE" 

Threading, concettualmente, potrebbe ridurre i costi di comunicazione del disco copia di I/O dal processo gatto dal processo di grep.

1

Ecco la migliore risposta per chiarire i dubbi di chiunque relativi al parallelismo e al threading. [L'ho letto su quora e ho trovato utile condividere con i lettori di SO.]
I thread sono un costrutto software. Posso iniziare il maggior numero di pthreads che voglio, anche su un vecchio processore single core. Quindi il multi-threading non è necessariamente parallelo: è solo parallelo se l'hardware può supportarlo. Quindi se hai più core e/o hyperthreading, il tuo multi-threading diventa parallelo. E questi giorni è, in effetti, la maggior parte del tempo.

La concorrenza riguarda attività che non hanno un ordinamento temporale chiaro. Quindi, di nuovo, se l'hardware lo supporta, possono essere eseguiti in parallelo, in caso contrario, no.

Quindi, tradizionalmente il multi-threading è quasi sinonimo di concorrenza. Ed entrambi diventano paralleli solo se l'hardware lo supporta. Anche in questo caso è possibile avviare molti più thread rispetto ai supporti hardware e si rimane in concorrenza.