Thread o processo quale usare - 2010-11-02

431 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
431
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Thread o processo quale usare - 2010-11-02

  1. 1. Published on LElettronica Open Source (http://it.emcelettronica.com)Home > Blog > blog di slovati > ContenutoThread o Processo: quale usare?By slovatiCreated 02/11/2010 - 07:50Thread o Processo: quale usare? I sistemi operativi multi-tasking, in grado di gestire laconcorrenza tra più task in esecuzione sullo stesso hardware, sono sempre più diffusi e trovanoapplicazione anche nei dispositivi con cui interagiamo tutti i giorni, come cellulari e smartphone.Parlando di multi-tasking, si usano spesso i termini processo e thread, ma qualè la differenza tra idue e quando usare luno o laltro?Thread o Processo - OverviewAnzitutto possiamo dire che i thread possono essere paragonati a dei processi "light", nel senso cheoffrono vantaggi analoghi a quelli dei processi, senza però richiedere le tecniche di comunicazione tipichedei processi. I thread permettono di dividere il flusso di controllo principale di un programma in più flussi dicontrollo in esecuzione concorrente. Ogni processo ha un proprio spazio di indirizzamento e delle risorseproprie; ne consegue che la comunicazione tra parti di codice in esecuzione su processi differenti puòavvenire solo attraverso appositi meccanismi di gestione della concorrenza: pipe, code fifo, mailbox, areedi memoria condivise, ecc. I thread, viceversa, permettono di creare parti di programma in esecuzioneconcorrente, in cui ogni parte può accedere allo stesso spazio di indirizzamento, variabili, e costanti.Definizione di threadPer thread si intende un blocco di codice eseguibile allinterno di un sistema operativo che ha la capacità diessere schedulato (la schedulazione è il meccanismo con il quale il sisema operativo assegna il tempo dielaborazione alle unità che ne fanno richiesta). Un thread richiede molta meno informazione di unprocesso, e quindi comporta un minore overhead per il sistema operativo. Ogni processo ha almeno unthread (il thread primario, o principale) ma in genere dispone di thread multipli, ciascuno dei quali vieneeseguito in modo concorrente ed indipendente dagli altri; in questo caso si parla di processo multi-thread.Tutti i thread in esecuzione allinterno di un processo condividono lo stesso spazio di indirizzamento e lealtre risorse: i thread non hanno quindi risorse proprie, ma hanno ovviamente un proprio program counter,stack, e registri di stato. Gli stack dei vari thread saranno tutti contenuti allinterno del segmento stack delprocesso, menre il segmento dati del processo verrà condiviso tra i thread.I thread possono inoltre creare altri thread, alinterno dello stesso processo, e possono anche eseguiresuspend, resume, o terminare altri thread dello stesso processo. Nei sistemi multi-processore, i threadappartenenti ad uno stesso processo possono essere eseguiti su processori diversi, ma solo suiprocessori assegnati a quel processo. Nei sistemi mono-processore, i thread sono costretti a competereper luso della risorsa condivisa. Quando poi più thread sono in esecuzione concorrente allinterno dellostesso processo, il processo stesso viene detto multi-thread.
  2. 2. E fondamentale osservare come il context-switch ("cambio di contesto", il meccanismo con cui il controllopassa da un processo, o thread, ad un altro) sia molto più oneroso per il sistema quando esso avviene trathread appartenenti a processi differenti, rispetto al caso in cui i thread appartengano allo stesso processo;il motivo per cui ciò avviene è che nel primo caso avviene anche un context-switch tra processi, mentre nelsecondo caso avviene solo tra thread.Confronto tra thread e processoCome già accennato in precedenza, la principale differenza è che ogni processo ha il proprio spazio diindirizzamento, mentre il thread no. Quando un processo crea altri processi figli, questi avranno ciascuno ilproprio spazio di indirizzamento ed una copia del segmento dati: se pertanto un processo figlio modificaparte dei suoi dati, questo non avrà conseguenze sui dati del processo padre; se si vogliono pertantoscambiare informazioni tra i processi, occorre ricorrere a meccanismi di inter-process-communication(IPC). Per contro, i thread appartenenti ad uno stesso processo possono comunicare e scambiarsiinformazioni semplicemente accedendo ai dati del processo padre.I principali vantaggi dei thread si possono così riassumere: context-switch più veloce e meno oneroso per il sistema miglioramento delle performance dellapplicazione (mentre un thread è sospeso in attesa di eseguire unoperazione di I/O, un altro può eseguire altre operazioni) semplificano la struttura del programma: larchitettura di unapplicazione può essere decomposta in vari task e ciascun task assegnato ad un thread, con la sua priorità non richiedono meccanismi espliciti di IPC: i thread comunicano utilizzando la memoria condivisa nello spazio di indirizzamento del processo permettono un controllo completo sugli altri thread dello stesso processo (un processo può controllare solo i suoi processi figli)Gli svantaggi dei thread sono essenzialmente i seguenti: possono corrompere larea dati del processo di appartenenza anche se non richiedono meccansimi di IPC, necessitano comunque di unopportuna sincronizzazione quando accedono concorrentemente alle stesso aree di memoria un thread può terminare altri thread, e tra questi anche il main thread del processo! scarsa riusabilità del codice di un thread se mal gestiti, possono causare il blocco/terminazione del processo: i thread non sono isolati come i processi, per cui un fatal access eseguito da un thread può mandare in crash lintero processoCome in tutte le cose, anche in questo caso la decisione su quale tra processo o thread sia la soluzionemigliore dipende dal particolare tipo di applicazione e dal livello di affidabilità che si intende raggiungere. Ithread sono più veloci, efifcienti, e semplici da usare dei processi, però si perde in sicurezza e performance.Nellimmagine seguente viene mostrata la struttura di un processo, con i vari segmenti (stack, heap, staticdata e codice) ed i registri per puntare allo stack (SP) ed al codice (PC).Questaltra immagine, invece, si riferisce al caso di due thread (T 1 e T2) definiti allinterno dello stessoprocesso; si osservi la presenza di due stack pointer e program counter separati per ogni thread.
  3. 3. Programmazione C/C++ Assembler embedded multitasking multithread process programming real-time thread EMCelettronica Srl - P.iva 06433601009Source URL: http://it.emcelettronica.com/thread-o-processo-quale-usare

×