Vai al contenuto

Programmazione parallela

Da Wikiversità, l'apprendimento libero.
lezione
lezione
Programmazione parallela
Tipo di risorsa Tipo: lezione
Materia di appartenenza Materia: Fondamenti di informatica

Insieme delle tecniche, metodologie e strumenti per il supporto all'esecuzione di sistemi software composti da insiemi di attività svolte simultaneamente, non necessariamente sullo stesso elaboratore.

Elementi

[modifica]

Tipicamente si parla si soggetti o processi da sincronizzare, che a livello implementativo prendono il nome di thread una volta in esecuzione. Il thread è un insieme di istruzioni effettivamente attive nell'unità di elaborazione (da non confondere con i processi, coi quali si intende indicare una sezione di codice non ancora in esecuzione), che può essere eseguito parallelamente ad altri. Tramite l'uso dei thread, un programma è in grado di fare più cose contemporaneamente: dal velocizzare la propria esecuzione al realizzare comunicazioni asincrone.

Gli oggetti su cui i soggetti operano sono invece risorse di I/O, variabili condivise o qualsiasi altro elemento necessario alla corretta esecuzione dell'algoritmo; generalmente numericamente inferiori al numero dei soggetti richiedenti.

Sarà il kernel ad offrire i meccanismi necessari a permettere il corretto funzionamento della programmazione multi-thread, attraverso un linguaggio che ne supporti le funzionalità (generalmente delle particolari interrupt).

Sincronizzazione

[modifica]

Si rende necessaria ogni qual volta più thread lavorano su più oggetti condivisi. Avendo a disposizione una macchina in grado di eseguire più processi sequenziali contemporaneamente e un linguaggio di programmazione con il quale descrivere algoritmi non sequenziali, è possibile eseguire programmi concorrenti. Con questa tecnica si può gestire agevolmente:

Cooperazione
sincronizzazione diretta (esplicita)
Competizione
sincronizzazione indiretta (implicita)
Interferenza
interazioni tra processi non richieste dalla natura del problema, tipicamente errori di programmazione

Deadlock

[modifica]

Situazione di stallo, conosciuta anche come blocco critico, in cui due o più processi attendono reciprocamente una risorsa (oggetto) condiviso