Threading.

Threading
Threading

Definizione di Thread.

Un thread è un’unità di esecuzione all’interno di un processo.

Un processo può contenere:

  • uno o più thread
  • spazio di memoria condiviso
  • risorse comuni (file, heap)

Distinzione fondamentale:

ProcessoThread
Spazio di memoria separatoCondivide memoria del processo
Più costosoPiù leggero
Comunicazione tramite IPCComunicazione diretta

Contesto architetturale.

Modello di esecuzione.

Il sistema operativo:

  • assegna thread ai core della CPU
  • gestisce il context switching
  • pianifica l’esecuzione (scheduler)

Tipi di parallelismo:

  • Concorrenza (apparente, time slicing)
  • Parallelismo reale (multi-core)

Ciclo di vita di un thread.

Stati principali:

  • New
  • Runnable
  • Running
  • Blocked / Waiting
  • Terminated

Il passaggio tra stati è gestito dallo scheduler del sistema operativo.

Perché usare il threading?

Obiettivi principali:

  • Migliorare le prestazioni
  • Sfruttare CPU multi-core
  • Migliorare la responsività (es. GUI)
  • Gestire operazioni I/O bloccanti

Esempi concreti:

  • Server web
  • Applicazioni bancarie
  • Elaborazione parallela di dati
  • Rendering grafico

Problemi del threading.

Race condition.

Due thread accedono contemporaneamente a una risorsa condivisa.

Deadlock.

Due o più thread si bloccano reciprocamente.

Starvation.

Un thread non ottiene mai risorse.

Livelock.

Thread attivi, ma senza progresso reale.

Sincronizzazione.

Per evitare problemi si usano:

  • Mutex
  • Lock
  • Semafori
  • Monitor
  • Variabili atomiche

Concetto chiave:
Sezione critica

lock()

    accesso alla risorsa condivisa

unlock()

Threading nei linguaggi (esempio Java).

class MioThread extends Thread {

    public void run() {

        System.out.println(“Thread in esecuzione”);

    }

}

MioThread t = new MioThread();

t.start();

Oppure con Runnable:

Runnable r = () -> {

    System.out.println(“Thread attivo”);

};

new Thread(r).start();

Concetti:

  • start() vs run()
  • join()
  • synchronized

Modelli di concorrenza moderni.

Evoluzione:

  • Thread pool
  • Executor framework
  • Programmazione asincrona
  • Future / Promise
  • Reactive programming

Thread vs Processi vs Async.

Distinguere:

  • Multi-threading → condivisione memoria
  • Multi-processing → isolamento
  • Programmazione asincrona → non blocca flusso principale

Collegamento alla classe B016.

In un Istituto Tecnico, introdurrei il concetto di threading nel quinto anno, dopo aver consolidato sistemi operativi e programmazione a oggetti, attraverso simulazioni di server multi-thread e gestione di risorse condivise.

Attività di laboratorio.

  • Simulazione conto bancario con race condition
  • Implementazione produttore-consumatore
  • Analisi di deadlock
  • Confronto prestazioni single vs multi-thread

Competenze sviluppate.

  • Comprensione architettura sistemi
  • Consapevolezza della concorrenza
  • Analisi delle prestazioni
  • Debug avanzato

Inclusione BES/DSA.

  • Schemi visivi dei thread
  • Simulazioni con diagrammi temporali
  • Esempi concreti (sportello bancario)
  • Semplificazione iniziale con pseudocodice

Collegamenti interdisciplinari.

  • Sistemi operativi (scheduler)
  • Architettura degli elaboratori (multi-core)
  • Reti (server concorrenti)
  • Cybersecurity (race condition come vulnerabilità)

Il threading rappresenta un concetto chiave dell’informatica moderna, poiché consente di comprendere la concorrenza, l’uso efficiente delle risorse hardware e le problematiche di sincronizzazione, integrando aspetti teorici di sistemi operativi con applicazioni pratiche di sviluppo software.

Schema rapido da memorizzare.

  1. Definizione
  2. Processo vs Thread
  3. Scheduler e stati
  4. Motivazioni
  5. Problemi (race, deadlock)
  6. Sincronizzazione
  7. Esempi linguistici
  8. Attività laboratoriale
  9. Conclusione
** Se puoi sostenere il mio lavoro, comprami un libro | Buy me a book! **
** ISCRIVITI ALLA NEWSLETTER ! **

About the Author

Sergio Mauri
Blogger, autore. Perito in Sistemi Informativi Aziendali, musicista e compositore, Laurea in Discipline storiche e filosofiche e in Filosofia. Premio speciale al Concorso Claudia Ruggeri nel 2007; terzo posto al Premio Igor Slavich nel 2020. Ha pubblicato con Terra d'Ulivi nel 2007 e nel 2011, con Hammerle Editori nel 2013 e 2014, con PGreco nel 2015 con Historica Edizioni e Alcova Letteraria nel 2022 con Silele Edizioni (La Tela Nera) nel 2023 e con Amazon Kdp nel 2024 e 2025.