2009-07-02 16 views
8

è possibile utilizzare in modo intercambiabile "Codifica parallela" e "Codifica multithreading" su singola CPU?Codifica parallela Vs Multithreading (su singola CPU)

Non ho molta esperienza in entrambi, ma voglio spostare il mio stile di codifica su uno dei precedenti.

Come ho trovato ora un giorno molte applicazioni single thred sono obsolete, che sarebbe meglio per il futuro software industy come una prospettiva di carriera?

risposta

0

Non sono sicuro di cosa pensate che "la codifica parallela" sia codifica parallela, poiché capisco che si riferisce alla produzione di codice che viene eseguito in parallelo dalla CPU, e quindi il codice multithreading rientra in tale descrizione.

In questo modo, ovviamente è possibile utilizzarli in modo intercambiabile (come uno cade all'interno dell'altro).

Tuttavia, ti suggerisco di prenderlo piano e iniziare a imparare dalle basi. Capire perché il multithreading sta diventando importante, qual è la differenza tra processi, fili e fibre, come sincronizzarli e così via.

Ricordare che la codifica parallela, come la si chiama, è piuttosto complessa, specialmente rispetto alla codifica sequenziale quindi preparatevi. Inoltre non affrettarti. Solo perché usi 3 thread invece di uno non renderà il tuo programma più veloce, può anche renderlo più lento. Devi capire il come e il perché. Non tutto può essere fatto parallelo e non tutto ciò che può, dovrebbe.

2

La domanda è un po 'confusa poiché è possibile eseguire operazioni parallele in più thread, ma tutte le applicazioni multi-thread non utilizzano il calcolo parallelo. Nel codice parallelo, in genere si hanno molti "lavoratori" che consumano un insieme di dati per restituire i risultati in modo asincrono. Ma il multithread è utilizzato in un ambito più ampio, come la GUI, bloccando l'I/O e il networking.

Essere su una singola CPU o molte non cambia molto, poiché la gestione dipende da come il SO può gestire thread e processi.

Il multithreading sarà utile ovunque, il parallelo non è un paradigma di computing quotidiano, quindi potrebbe essere una "nicchia" in una prospettiva di carriera.

2

Alcune demo che ho visto in .NET 4.0, le modifiche al codice Parallelo sembrano più semplici rispetto ai thread. C'è una nuova sintassi per "For Loops" e altre cose per supportare l'elaborazione parallela. Quindi c'è una differenza.

Penso che in futuro farai entrambe le cose, ma penso che il supporto Parallelo sarà migliore e più facile. Hai ancora bisogno di discussioni per le operazioni in background e altre cose.

+0

http: //channel9.msdn. it/post/VisualStudio/Utilizzo-the-Parallel-Extensions-to-the-NET-Framework/ – eschneider

1

Il fatto è che non è possibile ottenere un parallelismo "reale" su una singola CPU. Ci sono diverse librerie (come l'MPI di C) che aiutano un po 'in quest'area. Ma il concetto di paralellismo non è quello usato tra gli sviluppatori che lavorano su popolari soluzioni.

Il multithreading è comune in questi giorni grazie all'introduzione di più core su una singola CPU, è facile e quasi trasparente da implementare in ogni lingua grazie alle lib di thread e ai tipi di threadsafe, ai metodi, alle classi e così via. In questo modo puoi simulare il paralellismo.

In ogni caso, se si inizia da questo, iniziare leggendo argomenti di concorrenza e threading. E naturalmente thread + parallelismo funzionano bene insieme.

+0

Il multithreading non è facile praticamente in nessuna lingua tranne forse in erlang. –

+0

Ho sentito molto parlare di erlang e paralellismo su erlang. Sfortunatamente non conosco questa lingua. Con il semplice Multithreading, intendo creare più thread e farli funzionare in modo coerente. So che non è banale, ma non è così difficile prendere in considerazione la ricerca di un'altra soluzione al tuo problema anziché il threading. –

+0

@Jorge - Non penso che erlang usi i thread, ma i processi leggeri che non condividono la memoria – bubaker

12

Esiste sicuramente una sovrapposizione tra multithreading e codifica/calcolo parallelo, con le principali differenze nell'architettura di elaborazione di destinazione.

Multithreading è stato usato per sfruttare i vantaggi della concorrenza all'interno di un singolo processo su una singola CPU con memoria condivisa. L'esecuzione degli stessi programmi su una macchina con più CPU può comportare un notevole aumento della velocità, ma spesso è un bonus piuttosto che previsto (fino a poco tempo fa). Molti SO hanno modelli di threading (ad esempio pthreads), che beneficiano ma non richiedono più CPU.

Multiprocessing è il modello standard per parallelo programmazione mira CPU multiple, dalle macchine SMP primi con molte CPU su una grande macchina, poi a cluster di calcolo in molte macchine, e ora di nuovo a molte CPU/core su un computer singolo. MPI è uno standard che può funzionare su molte diverse architetture.

Naturalmente, è possibile programmare un progetto parallelo utilizzando thread con framework di linguaggio come OpenMP. Ho sentito parlare di GUI/applicazioni multicomponenti che si basano su un'elaborazione separata che teoricamente potrebbe funzionare ovunque. In pratica, c'è più del primo rispetto al secondo.

Probabilmente la distinzione principale è quando il programma viene eseguito su più macchine, dove non è pratico utilizzare il multithreading e le applicazioni esistenti che condividono la memoria non funzioneranno.

0

in un linguaggio semplice multithreading è disponibile nella CPU da solo e programmazione parallela è un compito esplicito sia fatto dal compilatore o le mie costrutti scritto da programmatori "#pragma"

Problemi correlati