2009-11-11 13 views
36

ero molto confuso, ma questo thread chiarito i miei dubbi:Threads & Processes Vs MultiThreading & Multi-Core/MultiProcessor: come sono mappati?

Multiprocessing, Multithreading,HyperThreading, Multi-core

Ma affronta le query dal punto di vista hardware. Voglio sapere in che modo queste caratteristiche hardware sono associate al software?

Una cosa che è evidente è che non c'è differenza tra MultiProcessor (= Mutlicpu) e multipolari diverso da quello in multicore tutte le CPU risiedono su un unico chip (die) dove come in Multiprocessor tutte le CPU sono i propri chip & collegati insieme.

Quindi, i sistemi multiprocessore/multiprocessore sono in grado di eseguire più processi (firefox, mediaplayer, googletalk) allo "sametime" (a differenza del contesto che commuta questi processi su un singolo processore). Giusto?

Se corretto. Sono chiaro finora. Ma la confusione sorge quando il multithreading entra in scena.

  1. MultiThreading "è per" elaborazione parallela. destra?

  2. Quali sono gli elementi che sono coinvolti nel multithreading all'interno della CPU? diagramma? Per sfruttare la potenza dell'elaborazione parallela di due compiti indipendenti, quali dovrebbero essere i requriements della CPU?

  3. Quando le persone dicono il cambio di contesto dei thread. Non capisco davvero. perché se il suo contesto cambia di thread allora la sua elaborazione non parallela. i thread devono essere eseguiti "simultaneamente simultaneamente". destra?

    La mia nozione di multithreading è quella: Considerando un sistema con CPU singola. quando il processo è passato a Firefox. (supponiamo) ogni tab di firefox sia un thread e tutti i thread siano eseguiti rigorosamente allo stesso tempo. Non è come se un thread fosse stato eseguito per un po 'di tempo, ma un altro thread ha richiesto fino a quando non è arrivato il tempo di commutazione del contesto.

  4. Cosa succede se eseguo un software multithread su un processore che non è in grado di gestire i thread? Voglio dire, come fa la CPU a gestire questo software?

  5. Se tutto è buono finora, ora la domanda è QUANTI FILETTI? Deve essere limitato dall'hardware, immagino? Se l'hardware supporta solo 2 thread e avvio 10 thread nel mio processo. Come potrebbe gestire la CPU? Pro e contro? Dal punto di vista dell'ingegneria del software, mentre lo sviluppo di un software che verrà utilizzato dagli utenti in un'ampia varietà di sistemi, quindi come dovrei decidere se dovessi andare per il multithreading? se sì, quanti fili?

risposta

37

Innanzitutto, prova a comprendere il concetto di "processo" e "thread". Un thread è un'unità di base per l'esecuzione: un thread è pianificato dal sistema operativo ed eseguito dalla CPU. Un processo è una sorta di contenitore che contiene più thread.

  1. Sì, sia l'elaborazione multipla o multi-threading è per l'elaborazione parallela. Più precisamente, per sfruttare il parallelismo a livello di thread.

  2. Ok, multi-threading potrebbe significare multi-threading hardware (un esempio è HyperThreading). Suppongo però che tu dica il multithreading nel software. In questo senso, la CPU dovrebbe supportare il cambio di contesto.

  3. Il cambio di contesto è necessario per implementare il multitasking anche in un singolo nodo fisico per divisione temporale.

  4. Dire che ci sono due core fisici e quattro thread molto occupati. In questo caso, due thread stanno solo aspettando di avere la possibilità di utilizzare la CPU. Leggi alcuni articoli relativi alla pianificazione preventiva del sistema operativo.

  5. Il numero di thread che può essere eseguito fisicamente in concomitanza è identico al numero di processori logici . Stai chiedendo un problema generale di programmazione dei thread nella letteratura del sistema operativo come round-robin.

ho fortemente suggeriscono di studiare basi del sistema operativo prima. Quindi passare a problemi di multithreading. Sembra che tu non sia ancora chiaro per i concetti chiave come il cambio di contesto e la programmazione. Ci vorrà un paio di mesi, ma se vuoi davvero essere un esperto di software per computer, allora dovresti conoscere concetti così basilari. Si prega di prendere qualsiasi libro OS e diapositive lezione.

+6

+1 ma un problema simmetrico: "5. Il numero di ... _concurrent_ è identico a # dei processori logici." Dovrebbe essere simultaneamente Più thread eseguiti su un singolo processore logico vengono eseguiti simultaneamente in caso di commutazione. –

1
  1. In linea di massima, sì, ma "parallelo" può significare cose diverse.

  2. Dipende da quali attività si desidera eseguire in parallelo.

  3. Non necessariamente. Alcuni (anzi la maggior parte) discussioni passano molto tempo a non fare nulla. Potrebbe anche passare da loro a un thread che vuole fare qualcosa.

  4. Il sistema operativo gestisce la commutazione del filo. Se delegato, delegherà a diversi core.Se c'è un solo core, dividerà il tempo tra i diversi thread e processi.

  5. Il numero di thread è limitato dal software e dall'hardware. I thread consumano processore e memoria in vari gradi a seconda di cosa stanno facendo. Anche il software di gestione dei thread può imporre i propri limiti.

2

Più thread sono "catene" separate di comandi all'interno di un processo. Dal punto di vista della CPU i thread sono più o meno come i processi. Ogni thread ha il proprio set di registri e il proprio stack.

Il motivo per cui è possibile avere più thread rispetto alle CPU è che la maggior parte dei thread non richiede sempre la CPU. Thread può attendere l'input dell'utente, il download di qualcosa dal web o la scrittura su disco. Mentre lo fa, non ha bisogno della CPU, quindi la CPU è libera di eseguire altri thread.

Nel tuo esempio, ogni scheda di Firefox probabilmente può anche avere più thread. Oppure possono condividere alcuni thread. Ne hai bisogno uno per il download, uno per il rendering, uno per il loop dei messaggi (input dell'utente) e forse uno per eseguire Javascript. Non puoi combinarli facilmente perché mentre scarichi devi comunque reagire all'input dell'utente. Tuttavia, il thread di download sta dormendo la maggior parte del tempo, e anche quando viene scaricato, ha bisogno della CPU solo occasionalmente e il thread del loop dei messaggi si attiva solo quando si preme un pulsante.

Se si passa al task manager, si vedrà che nonostante tutti questi thread l'utilizzo della CPU è ancora piuttosto basso.

Ovviamente se tutti i thread eseguono alcune attività di sgranatura numerica, non è necessario crearne troppe poiché non si ottengono vantaggi in termini di prestazioni (anche se potrebbero esserci vantaggi architettonici!).

Tuttavia, se sono principalmente collegati all'I/O, creare quindi tutti i thread richiesti dall'architettura. È difficile dare consigli senza conoscere il tuo particolare compito.

11

I fili in esecuzione sullo stesso nucleo non sono tecnicamente paralleli. Sembrano essere eseguiti in parallelo, in quanto la CPU cambia molto velocemente tra di loro (per noi umani). Questo interruttore è ciò che viene chiamato interruttore di contesto. Ora i thread in esecuzione su core diversi vengono eseguiti in parallelo. maggior parte delle CPU moderne hanno un numero di nuclei, tuttavia, la maggior parte dei sistemi operativi moderni (Windows, Linux e amici) solito eseguire molto più grande numero di fili, che provoca ancora commutazioni di contesto. Anche se non viene eseguito alcun programma utente, il sistema operativo stesso esegue gli switch di contesto per il lavoro di manutenzione.
Questo dovrebbe rispondere 1-3.

Circa 4: in pratica, ogni processore può funzionare con i thread. è molto più una caratteristica del sistema operativo. Il thread è fondamentalmente: memoria (opzionale), stack e registri, una volta che questi vengono sostituiti, ci si trova in un'altra discussione.

5: il numero di thread è piuttosto alto ed è limitato dal sistema operativo. Di solito è superiore a un normale programmatore in grado di gestire correttamente :) Il numero di thread è dettato dal tuo programma:

è IO vincolato?

  • il compito può essere suddiviso in un numero di attività più piccole?
  • quanto è piccola l'attività? l'attività può essere troppo piccola per fare in modo che valga la pena di generare i thread.
  • sincronizzazione: se è necessaria una sincronizzazione estesa, la penalità potrebbe essere troppo pesante e si dovrebbe ridurre il numero di thread.
+0

Il numero di thread è piuttosto alto ed è limitato dal sistema operativo. Di solito è superiore a un normale programmatore in grado di gestire correttamente: D: D –

1

La cosa fondamentale da ricordare è la separazione tra parallelismo logico/virtuale e parallelismo reale/hardware. Con il sistema operativo medio, viene eseguita una chiamata di sistema per generare un nuovo thread. Ciò che accade in realtà (indipendentemente dal fatto che sia mappato su un core diverso, un thread hardware diverso sullo stesso core o inserito nel pool di thread software) dipende dal sistema operativo.

  1. L'elaborazione parallela utilizza tutti i metodi, non solo il multi-threading.
  2. In generale, se si vuole avere vera elaborazione parallela, è necessario eseguire in hardware. Prendi l'esempio dello Niagara, ha fino a 8 core ciascuno in grado di eseguire 4 thread nell'hardware.
  3. commutazione di contesto è necessaria quando ci sono più fili che è in grado di essere eseguite in parallelo in hardware. Anche allora, quando eseguito in serie (commutazione tra un filetto al successivo), sono considerati simultanea poiché non v'è alcuna garanzia sul ordine di commutazione. Quindi, potrebbe passare a T0, T1, T2, T1, T3, T0, T2 e così via. A tutti gli effetti, i thread sono paralleli.
  4. Tempo di affettatura.
  5. Quello sarebbe fino al sistema operativo.
1

Il multithreading è l'esecuzione di più di un thread alla volta. Può accadere sia su processori single core che su sistemi con processore multicore. Per i sistemi a processore singolo, il cambio di contesto lo effettua. Guarda! Il cambio di contesto in questo ambiente computazionale fa riferimento al time slicing da parte del sistema operativo. Quindi non confondersi. Il sistema operativo è quello che controlla l'esecuzione di altri programmi. Permette di eseguire un programma nella CPU alla volta. Ma la frequenza con cui i thread sono inseriti e fuori dalla CPU determina la trasparenza del parallelismo esibita dal sistema.

Per ambiente multicore, multithreading verifica quando ogni core esegue una thread.Though, in multicore nuovo, commutazione di contesto può verificarsi nei singoli nuclei.

0

Penso che le risposte finora siano più o meno pertinenti e offrono un buon contesto di base. In sostanza, supponiamo di avere un processore quad core, ma ogni core è in grado di eseguire 2 thread simultanei.

Nota: c'è solo un leggero (o nessun) aumento di velocità se si stanno eseguendo 2 thread simultanei su 1 core contro si esegue 1 ° filo e poi 2 ° filo verticalmente. Tuttavia, ogni core fisico aggiunge velocità al tuo flusso di lavoro generale.

Ora, diciamo che hai un processo in esecuzione sul tuo sistema operativo che ha più thread (cioè deve eseguire più cose in "parallelo") e ha una sorta di pila di compiti in una coda (o qualche altro sistema con regole di priorità). Quindi il software invia le attività a una coda e il processore tenta di eseguirle il più velocemente possibile. Ora avete 2 casi:

  1. Se un software supporta il multiprocessing, quindi compiti saranno inviati a qualsiasi processore disponibile (che non sta facendo nulla o semplicemente finito di fare qualche altro lavoro e di lavoro di inviare dal vostro software è il 1 ° in un coda).
  2. Se il software non supporta il multiprocessing, tutti i lavori verranno eseguiti in modo simile, ma solo da uno dei core.

Suggerisco di leggere Wikipedia page sulla discussione. La prima immagine in assoluto ti dà già una buona idea. :)