In questo articolo cerchiamo di fare un piccolo riassunto di concetti fondamentali per comprendere la programmazione concorrente, argomento tipico delle classi quarte dell’ITT Informatica e la materia Tecnologie e progettazione di sistemi informatici.
Indice dei contenuti
Risorse
Nel contesto di sistemi concorrenti e paralleli, una risorsa è qualsiasi componente (hardware o software) limitato, necessario all’esecuzione di un processo o di un thread. Le risorse possono essere fisiche o logiche. Sono limitate in quantità, ovvero più processi possono richiederle nello stesso tempo, ed è qui che nasce il bisogno di gestirle per ottimizzare il loro utilizzo ed impedire a processi di utilizzarle e riservarle in modo esclusivo danneggiando l’evoluzione di altri processi..
Tipi di risorse
- Risorse hardware
- CPU / core → unità di calcolo. E’ quella più evidente, gestita dagli algoritmi di scheduling (FIFO, SJF, Roud Robin ecc)
- Memoria RAM → spazio dove salvare dati e variabili
- Dispositivi di I/O → stampanti, dischi, tastiera, schermo, scheda di rete
- Bus e canali di comunicazione → vie per trasferire dati
- Risorse software
- File → possono essere letti/scritti solo in certi modi (es. accesso esclusivo).
- Variabili e strutture dati condivise → devono essere protette da accessi simultanei (vedremo es. mutex, semafori).
- Connessioni di rete → porte TCP, socket (solitamente programma di quinto TPSIT)
- Thread/processi stessi → considerati risorse da coordinare
Problematiche
- Scheduling: chi usa la CPU per primo?
- Mutua esclusione: evitare che due processi modifichino la stessa variabile contemporaneamente e creino letture falsate (problemi di consistenza).
- Deadlock: situazione di stallo in cui due processi restano bloccati perché ognuno aspetta una risorsa dell’altro.
- Starvation: un processo non riesce ad ottenere una o più risorse, che siano CPU o file, e quindi viene “affamato” ad oltranza. Occorrono politiche per cui i processi in starvation guadagnino importanza per ottenere le risorse necessarie.
Esempio quotidiano: due persone che cercano di passare da una porta stretta nello stesso momento → restano incastrate (deadlock).
Programmazione concorrente
- Definizione: un sistema è concorrente quando più processi vengono eseguite nello stesso periodo di tempo, condividendo le risorse disponibili
- Idea chiave: non significa che vengano eseguite davvero in contemporanea, ma anche che il processore passa velocemente da un’attività all’altra con il classico cambio di contesto. Ad esempio, mentre scarichi un file, puoi ancora ascoltare musica sul PC, entrambi i processi sono attivi, anche se la CPU li serve a turno. Altro esempio informatico: un server web che gestisce tante richieste utenti quasi nello stesso momento.
Programmazione parallela
- Definizione: più attività vengono realmente eseguite nello stesso istante, perché ci sono più unità di calcolo (più core della CPU o più processori). Parallelismo non implica necessariamente concorrenza, ma è ovvio che se spezzetto attività in modo atomico, probabilmente dovrò ricongiungere le parti, attendendo che tutte finiscano.
- Idea chiave: parallelismo = esecuzione contemporanea reale. Esempio, due persone cucinano: una prepara la pasta, l’altra il sugo → attività realmente parallele. Esempio informatico: algoritmi di calcolo scientifico che sfruttano più core per dividere i dati e velocizzare i tempi.
👉 Frase chiave da ricordare:
- Concorrenza = questione di design del software.
- Parallelismo = questione di hardware disponibile.
Ultima modifica 13 Ottobre 2025




