Programmazione parallela

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.

lezione
lezione
Programmazione parallela
Tipo di risorsa Tipo: lezione
Materia di appartenenza Materia: Fondamenti di informatica

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