2012-05-07 15 views
9

Ho trovato una risposta alla domanda here. Ma non capisco alcune idee nella risposta. Ad esempio, si dice che il processo leggero condivida lo spazio logico degli indirizzi con altri processi. Cosa significa? Posso capire la stessa situazione con 2 thread: entrambi condividono uno spazio di indirizzi, quindi entrambi possono leggere qualsiasi variabile dal segmento bss (per esempio). Ma abbiamo molti processi diversi con diverse sezioni di bss e non so come condividerli tutti.Qual è la differenza tra processo leggero e thread?

+1

Possibile duplicato di http://stackoverflow.com/questions/200469/what-is-the-difference-between-a-process-and-a-thread – Gray

+0

ti sembra di essere molto confuso su alcuni concetti. Ti suggerisco di ricercare prima la definizione di thread e processo. – Tudor

+0

@Gray, Capisco molto chiaramente la differenza tra processi e thread. Il problema è con la comprensione dei processi leggeri. – Allok

risposta

1

Da MSDN, Threads and Processes:

Processi esistono nel sistema operativo e corrispondono a ciò che gli utenti vedono come programmi o applicazioni. Un thread, d'altra parte, esiste all'interno di un processo. Per questo motivo, i thread vengono talvolta denominati come processi leggeri. Ogni processo è costituito da uno o più thread .

0

Un processo contiene uno o più thread e un thread può eseguire qualsiasi operazione che un processo può eseguire. Anche i thread all'interno di un processo condividono lo stesso spazio di indirizzi a causa del quale il costo della comunicazione tra i thread è basso poiché utilizza la stessa sezione di codice, la sezione dati e le risorse del sistema operativo, quindi tutte queste funzionalità del thread ne fanno un "processo leggero".

4

Non sono sicuro che le risposte siano corrette qui, quindi lasciatemi pubblicare la mia versione.

C'è una differenza tra processo - LWP (processo leggero) e thread utente. Lascerò da parte la definizione del processo poiché è più o meno noto e si concentra su LWP vs user threads. LWP è ciò che in sostanza sono chiamati thread di oggi. Originariamente, il thread utente significava un thread che è gestito dall'applicazione stessa e il kernel non ne sa nulla. LWP, d'altra parte, è un'unità di programmazione ed esecuzione da parte del kernel.

Esempio: Supponiamo che il sistema ha 3 altri processi in esecuzione e programmazione è round-robin senza priorità. E tu hai 1 processore/core.

Opzione 1. Hai 2 thread utente usando un LWP. Ciò significa che dal punto di vista del sistema operativo hai UN'UNITÀ di pianificazione. In totale ci sono 4 LWP in esecuzione (3 altri + 1 tuoi). Il tuo LWP ottiene 1/4 del tempo totale della CPU e poiché hai 2 thread utente, ognuno di loro ottiene 1/8 del tempo totale della CPU (dipende dalla tua implementazione)

Option2. Hai 2 LWP. Dal punto di vista del sistema operativo, hai due unità di pianificazione. Totalmente ci sono 5 LWP in esecuzione. Il tuo LWP ottiene 1/5 del tempo totale della CPU CIASCUNO e l'applicazione ottiene 2/5 della CPU.

Un'altra differenza fondamentale: LWP ha pid (id processo), thread utente no.

Per qualche motivo, la denominazione è poco incasinata e ci riferiamo a LWP come thread.

Ci sono sicuramente più differenze, ma per favore, fare riferimento alle diapositive. http://www.cosc.brocku.ca/Offerings/4P13/slides/threads.ppt

EDIT:

Dopo distacco, ho trovato un buon articolo che spiega tutto in maggiori dettagli ed è in inglese meglio che scrivo. http://www.thegeekstuff.com/2013/11/linux-process-and-threads/