2009-07-08 30 views
7

Sono sempre confuso sui concetti di thread. Non ho la possibilità di usarli in un ambiente reale finora. Sarebbe utile se qualcuno potesse spiegare discussioni per me.Cosa sono i thread (cos'è un thread)?

+1

Questa domanda è troppo ampia per rispondere. Inoltre, se non è necessario utilizzare i thread, non farlo. È troppo facile fare la cosa sbagliata. –

+4

Questa mi sembra una domanda perfettamente legittima che potrebbe aiutare molte persone. –

+0

@JohnSaunders È una domanda perfettamente legittima. Non tutte le domande su SA devono approfondire le oscure profondità esoteriche dell'IT e della programmazione. Stahp it. – Seph

risposta

7

Una spiegazione semplice potrebbe essere che si ha un lavoro da fare, e si ottiene una sola persona per fare il lavoro.

Questa singola persona è simile a una discussione in un computer.

Una persona può fare una cosa alla volta, quindi per fare il lavoro, procede attraverso i compiti del lavoro, un compito alla volta, una operazione su ogni attività alla volta.

Per velocizzare un lavoro, è possibile aggiungere più persone allo stesso lavoro. Ad esempio, diciamo che è necessario dipingere una casa. Assumi 4 persone per farlo.

Queste 4 persone potrebbero essere simili a 4 thread in quanto lavorano con le stesse risorse (stessa casa, gli stessi secchi di vernice) e possono dividere il lavoro.

Un processo sarebbe simile al lavoro di dipingere quella casa.

Questa semplice spiegazione in qualche modo si rompe quando si tratta di macchine che non hanno abbastanza core CPU per eseguire tutti i thread contemporaneamente, ma ho intenzione di ignorarlo qui.

+0

Semplice e facile da capire. –

2

Un singolo thread viene chiamato così perché è un singolo thread di esecuzione attraverso il codice. Se hai più thread, hai più thread di esecuzione attraverso il tuo codice simultaneamente (o contemporaneamente come supporta il tuo sistema singolo/multiplo). Entrambi i thread hanno accesso allo stesso heap usando pile differenti. Ciò significa che i dati nel tuo programma potrebbero essere visibili da entrambi i thread e potrebbero essere modificati da entrambi i thread. Ciò può naturalmente portare a seri problemi che richiedono protezione.

Vale la pena notare che un thread è diverso da un processo. Una differenza chiave è che due thread possono accedere agli stessi dati (heap) mentre due processi non possono.

Per una descrizione più completa vedi altre descrizioni in linea

wikipedia

2

A rischio di semplificare eccessivamente:

un thread è una linea di esecuzione attraverso un programma.

Nel tuo modello di programmazione di base, il computer traccia semplicemente attraverso il programma una dichiarazione alla volta e in un dato momento viene eseguita solo una istruzione. Se il tuo programma dirama o chiama un'altra routine, l'esecuzione lascerà il posto in cui il controllo viene trasferito e inizia l'esecuzione in un altro posto, ma, tuttavia, solo una cosa viene eseguita in qualsiasi momento.

Con i fili, è possibile eseguire più linee di controllo contemporaneamente. Ad esempio, una parte del programma può interagire con l'utente, mentre un'altra parte sta scaricando un file in background. I programmi multi-thread sono molto più difficili da programmare ed è molto più difficile immaginare come funzionano.

7

Qualcosa che nessuno ha preso il tempo di spiegarmi era la differenza tra un processo e un thread. Una volta capito questo, dove i thread si adattano ha molto senso.

Un sistema operativo fornisce una memoria di processo da utilizzare. Un processo una volta avviato ha solitamente un "thread" in esecuzione all'interno di esso.

Il thread è ciò che il sistema operativo pianifica per l'esecuzione sulla CPU e gli viene fornito un indirizzo per l'avvio delle istruzioni di esecuzione.

Alcune persone che erano molto più intelligenti di me hanno capito che creare processi nella maggior parte dei sistemi operativi era molto più costoso rispetto alla creazione di un thread di esecuzione. Inoltre, due thread nello stesso processo hanno la possibilità di accedere alla memoria dei processi senza utilizzare una chiamata del sistema operativo e/o memoria condivisa per farlo, il che significa che anche se ora è necessario sincronizzare l'accesso alla memoria dei thread, si potrebbe fare più lavoro in meno tempo.

Quindi il threading è un concetto importante da comprendere ed è il suo uso principale era aumentare le prestazioni dei programmi che avevano una concorrenza che poteva essere sfruttata, il primo uso principale (EDIT: questo potrebbe non essere stato il "primo" uso) esecuzione della GUI di un'applicazione su un thread e esecuzione dell'elaborazione su un altro, la pietra angolare del design dell'interfaccia utente moderna.

Problemi correlati