I moderni programmi per computer e i giochi ri­chie­do­no un hardware sempre più potente. La grafica è par­ti­co­lar­men­te so­fi­sti­ca­ta e det­ta­glia­ta, la quantità di memoria richiesta è enorme, pertanto è im­por­tan­te che la velocità di core del pro­ces­so­re sia elevata per poter lavorare con il computer desktop o portatile in modo fluido e veloce. Per rag­giun­ge­re tali ob­biet­ti­vi i pro­dut­to­ri di hardware pro­get­ta­no e svi­lup­pa­no co­stan­te­men­te nuove tec­no­lo­gie e ar­chi­tet­tu­re per le loro CPU. Una di queste tecniche è il mul­ti­th­rea­ding. Il pro­ces­so­re riesce in tal modo a eseguire più thread (piccole unità di calcolo) più o meno si­mul­ta­nea­men­te. Come funziona tutto ciò?

Acquista e registra il tuo dominio con il provider n°1 in Europa
  • Domain Connect gratuito per una con­fi­gu­ra­zio­ne facile del DNS
  • Cer­ti­fi­ca­to SSL Wildcard gratuito
  • Pro­te­zio­ne privacy inclusa

Che cos’è il mul­ti­th­rea­ding?

Per aumentare la velocità del core del pro­ces­so­re senza mo­di­fi­ca­re la frequenza di clock, si fa in modo che la CPU possa eseguire più ope­ra­zio­ni si­mul­ta­nea­men­te. Più pre­ci­sa­men­te, si eseguono più thread si­mul­ta­nea­men­te. Possiamo con­si­de­ra­re un thread come una porzione di un processo. I programmi, infatti, possono essere suddivisi in processi e questi a loro volta in singoli thread. Ogni processo è composto da almeno un thread.

I processi nor­mal­men­te vengono eseguiti in modo se­quen­zia­le, vale a dire un processo dopo l’altro. Ciò, tuttavia, non è ottimale, poiché in tal modo le ope­ra­zio­ni di una certa durata bloccano l’hardware. Se un altro processo deve essere eseguito, infatti, dovrà attendere finché l’hardware sarà pronto. Nel caso del mul­ti­th­rea­ding vengono, invece, eseguiti molti thread si­mul­ta­nea­men­te. Ciò è tuttavia vero solo re­la­ti­va­men­te. Un’effettiva si­mul­ta­nei­tà, infatti, può essere garantita solo raramente, ma è comunque per­se­gui­bi­le.

Anche con questa quasi si­mul­ta­nei­tà si riesce a ottenere un efficace in­cre­men­to di ren­di­men­to; il sistema, inoltre, organizza e calcola i thread in modo così in­tel­li­gen­te ed ef­fi­cien­te che gli utenti hanno ef­fet­ti­va­men­te la per­ce­zio­ne di un’ese­cu­zio­ne si­mul­ta­nea. Na­tu­ral­men­te questo tipo di si­mul­ta­nei­tà non può essere scambiato con le pos­si­bi­li­tà offerte dalla CPU multicore. Se il sistema è dotato di diversi mi­cro­pro­ces­so­ri, saranno eseguiti anche diversi processi con­tem­po­ra­nea­men­te.

Affinché il mul­ti­th­rea­ding possa essere impiegato con la massima efficacia, il software deve essere pre­di­spo­sto per tale azione. Se gli svi­lup­pa­to­ri non sud­di­vi­do­no i loro programmi in diversi thread (o non ne hanno la pos­si­bi­li­tà), la tec­no­lo­gia non potrà fun­zio­na­re. I “gamer” ap­pas­sio­na­ti di giochi, ad esempio, si sono spesso accorti che con un mul­ti­th­rea­ding attivato si verifica piuttosto un calo delle pre­sta­zio­ni. I vi­deo­gio­chi al computer non hanno pertanto po­ten­zia­li­tà si­ner­gi­che con questa tecnica. Il tentativo del sistema di eseguire più thread si­mul­ta­nea­men­te diventa in tal caso con­tro­pro­du­cen­te.

Ob­biet­ti­vi del mul­ti­th­rea­ding

Lo scopo prin­ci­pa­le del mul­ti­th­rea­ding è quello di aumentare la velocità di calcolo di un computer e pertanto la sua ef­fi­cien­za operativa e il ren­di­men­to. Per ottenere ciò si cerca di ot­ti­miz­za­re l’utilizzo della CPU. Invece di mantenere in ese­cu­zio­ne un processo, anche quando esso attende ancora dei dati, nel caso del mul­ti­th­rea­ding il sistema sceglie di dare ra­pi­da­men­te priorità all’ope­ra­zio­ne suc­ces­si­va. In questo modo non si creano code di attesa.

Il sistema, inoltre, reagisce allo stesso tempo più ve­lo­ce­men­te a modifiche delle priorità. Se utenti o ap­pli­ca­zio­ni ri­chie­do­no un’altra azione, con l’uso di gradi di priorità e thread brevi, il pro­ces­so­re può così occuparsi ve­lo­ce­men­te dell’ese­cu­zio­ne di altre ope­ra­zio­ni.

La tec­no­lo­gia è ottimale anzitutto per ve­lo­ciz­za­re singole ap­pli­ca­zio­ni composte di diversi processi e thread. Possono così essere eseguite in una certa misura pa­ral­le­la­men­te più ope­ra­zio­ni dello stesso software. Ciò è ideale, ad esempio, quando si creano dei video: il rendering di una scena può essere ef­fet­tua­to in back­ground, mentre l’utente si occupa nel frattempo dell’editing della scena suc­ces­si­va.

Con il mul­ti­th­rea­ding i pro­dut­to­ri di chip possono in­cre­men­ta­re la velocità delle loro CPU senza dovere impiegare una maggiore quantità di energia. Mentre un’elevata frequenza di clock produce una maggiore quantità di calore, che implica ov­via­men­te costi ag­giun­ti­vi, questo non succede con il mul­ti­th­rea­ding.

Come funziona il mul­ti­th­rea­ding?

Il mul­ti­th­rea­ding rap­pre­sen­ta un lavoro ot­ti­miz­za­to tra hardware e software. Programmi e processi vengono scomposti in singoli thread e la CPU elabora queste piccole unità. Esiste una dif­fe­ren­za, tuttavia, tra il mul­ti­th­rea­ding tramite hardware e quello che impiega il software.

Mul­ti­th­rea­ding tramite hardware

Nel caso del mul­ti­th­rea­ding tramite hardware, i singoli programmi pre­di­spon­go­no i loro processi scom­po­nen­do­li e ren­den­do­li di­spo­ni­bi­li in thread. Il sistema operativo gestisce quindi i thread e decide quando e quale “filo” deve essere inviato per primo alla CPU. Il pro­ces­so­re esegue suc­ces­si­va­men­te i thread in modo si­mul­ta­neo o quasi si­mul­ta­neo.

Nella pratica esistono diversi modi di ese­cu­zio­ne del mul­ti­th­rea­ding tramite hardware.

Switch on Event Mul­ti­th­rea­ding (SoEMT)

SoEMT lavora con due thread: uno di essi avviene in primo piano, l’altro in back­ground. Il cam­bia­men­to di livello (si parla di cam­bia­men­to di contesto) avviene at­tra­ver­so il rea­liz­zar­si di eventi. Un tale evento può essere ad esempio l’im­mis­sio­ne di un’in­for­ma­zio­ne da parte dell’utente oppure l’avviso che un thread è in attesa di dati e quindi la sua ese­cu­zio­ne non può pro­se­gui­re. Il sistema commuta in tale caso ve­lo­ce­men­te nel secondo thread e sposta l’altro in back­ground. Il thread pre­ce­den­te, ora in back­ground, verrà dunque eseguito quando le ne­ces­sa­rie in­for­ma­zio­ni saranno pervenute e di­spo­ni­bi­li. In con­clu­sio­ne, il sistema reagisce in tal modo ra­pi­da­men­te e crea una quasi si­mul­ta­nei­tà al­ter­na­ti­va tra i thread attivi in primo piano e quelli in back­ground.

“Switch on Event Mul­ti­th­rea­ding” è anche de­no­mi­na­to “Coarse-grained mul­ti­th­rea­ding“. Si considera ciò come una tecnica a “grana grossa”, poiché essa è adatta piuttosto per tempi d’attesa più lunghi. Mentre altre tecniche pre­sen­ta­no tempi di reazione molto più brevi, SoEMT mostra il suo punto di forza nell’ese­cu­zio­ne di grandi blocchi di thread.

Time-Slice Mul­ti­th­rea­ding

Nel caso della tecnica SoEMT, essa attiva il cam­bia­men­to tra thread in funzione di un evento, il Time-Slicing invece agisce con in­ter­val­li temporali pre­de­fi­ni­ti. Anche se il thread non è ancora concluso, il pro­ces­so­re ne considera un altro e cambia solo nel suc­ces­si­vo in­ter­val­lo, re­tro­ce­den­do, cioè com­mu­tan­do verso il primo per pro­se­gui­re la sua ese­cu­zio­ne. Ciascun avan­za­men­to dell’ese­cu­zio­ne di un thread viene salvato nella memoria RAM.

L’ob­biet­ti­vo consiste nello scegliere la lunghezza d’in­ter­val­lo più adatta. Se l’in­ter­val­lo di tempo è troppo breve, i processi non possono pro­se­gui­re ade­gua­ta­men­te nella loro ese­cu­zio­ne. Nel caso di lunghi in­ter­val­li, invece, si perde la quasi si­mul­ta­nei­tà al­ter­na­ti­va. Per l’utente, l’im­pres­sio­ne è che in effetti i processi siano eseguiti in suc­ces­sio­ne e non pa­ral­le­la­men­te.

Si­mul­ta­neous Mul­ti­th­rea­ding (SMT)

La tecnica di mul­ti­th­rea­ding SMT fornisce una vera si­mul­ta­nei­tà di ese­cu­zio­ne. Nelle co­sid­det­te pipeline i thread attendono che sia eseguito il calcolo. Il pro­ces­so­re lavora in modo parallelo diverse pipeline. Invece di commutare tra l’ese­cu­zio­ne di due thread, cambiando con­ti­nua­men­te dall’uno all’atro, parti dei processi vengono ef­fet­ti­va­men­te eseguite si­mul­ta­nea­men­te. Un singolo pro­ces­so­re, quindi, agisce come più pro­ces­so­ri (logici). Nella pratica, la tecnica SMT è connessa con la tec­no­lo­gia multicore: in tal modo un sistema con pro­ces­so­re a due core può com­por­tar­si come se avesse otto core.

Fatto

Il pro­dut­to­re di CPU Intel ha ottenuto molto successo con la tec­no­lo­gia Hyper-Threading (HTT). Anche la ditta con­cor­ren­te AMD produce una tec­no­lo­gia simile. In entrambi i casi si tratta di SMT.

mSZpDF-zUoI.jpg Per visualizzare questo video, sono necessari i cookie di terze parti. Puoi accedere e modificare le impostazioni dei cookie qui.

Mul­ti­th­rea­ding tramite software

Il mul­ti­th­rea­ding tramite software avviene esclu­si­va­men­te at­tra­ver­so l’ap­pli­ca­zio­ne che controlla la sud­di­vi­sio­ne dei processi in thread. Il sistema operativo e il pro­ces­so­re ricevono solo i singoli “fili”. La struttura hardware si comporta quindi pas­si­va­men­te ed elabora sem­pli­ce­men­te i thread sin­go­lar­men­te quando essi giungono. Il sistema sta­bi­li­sce per ciascun thread un livello di priorità. I livelli più elevati sono eseguiti più ve­lo­ce­men­te. Nel frattempo, con questa tecnica possono essere immessi per l’ese­cu­zio­ne i nuovi processi che devono essere com­ple­ta­ti ra­pi­da­men­te. Per i processi che ri­chie­do­no tempi maggiori, viene pre­di­spo­sto un solo thread e i thread suc­ces­si­vi vengono disposti in stato di attesa.

Fatto

Il mul­ti­th­rea­ding tramite software è ottimale anzitutto nel caso di sistemi con pro­ces­so­ri single core. Poiché i computer moderni, nel frattempo, sono stati però dotati come minimo con CPU Dual-Core, questo tipo di mul­ti­th­rea­ding diviene meno im­por­tan­te.

Mul­ti­th­rea­ding e mul­ti­ta­sking: le dif­fe­ren­ze

Le tec­no­lo­gie mul­ti­th­rea­ding e mul­ti­ta­sking a prima vista sembrano simili, esse tuttavia si basano su due diversi concetti. Il mul­ti­ta­sking si basa es­sen­zial­men­te sull’ese­cu­zio­ne parallela di diversi programmi. La CPU esegue una com­mu­ta­zio­ne in tale caso cambiando tra i singoli task. Le ap­pli­ca­zio­ni, tuttavia, non sono eseguite si­mul­ta­nea­men­te (né con­tem­po­ra­nea­men­te, né in modo quasi si­mul­ta­neo). Di norma, il sistema operativo si attiva or­ga­niz­zan­do l’ese­cu­zio­ne dei diversi task e invia i processi in attesa alla CPU. L’effetto che l’utente per­ce­pi­sce è quello di un’ese­cu­zio­ne parallela di programmi, in realtà avviene sempre una com­mu­ta­zio­ne tra essi.

Consiglio

Aprendo il task manager, vedrete quali processi sono attivi ed eseguiti pa­ral­le­la­men­te dal sistema. Anche aprendo il task manager del Mac, potrete osservare come sono or­ga­niz­za­te i diversi task.

Nel caso del mul­ti­th­rea­ding si tende a ottenere un alto livello di si­mul­ta­nei­tà. La tecnica, tuttavia, cerca in primo luogo di in­cre­men­ta­re la velocità dei singoli programmi. Mentre con il mul­ti­ta­sking vari programmi possono essere eseguiti in modo parallelo, nel caso del mul­ti­th­rea­ding i singoli thread pro­ven­go­no dallo stesso programma. L’ela­bo­ra­zio­ne si­mul­ta­nea di queste porzioni di processo permette una maggiore velocità di ese­cu­zio­ne del software.

In sintesi

Il mul­ti­th­rea­ding è una pos­si­bi­li­tà di aumentare il ren­di­men­to dei pro­ces­so­ri in modo in­tel­li­gen­te e con­ve­nien­te anche per quanto riguarda i costi. Ciò avviene però, solo se il software è pre­di­spo­sto per questo. Chi vuole ottenere un maggior ren­di­men­to dal proprio computer senza dover impiegare il mul­ti­th­rea­ding dispone quindi di altre pos­si­bi­li­tà. Se viene usato l’over­cloc­king della CPU, è ne­ces­sa­rio tuttavia stare attenti alla sua tem­pe­ra­tu­ra, al­tri­men­ti potrebbe succedere che in alcuni casi e alcune cir­co­stan­ze il sistema possa bloccarsi.

Vai al menu prin­ci­pa­le