Il corso introduce metodologie di programmazione multithreading e multicore, ad eventi (GUI, server, dispositivi mobili, IoT) e distribuita (architetture client/server, cloud). I contenuti sono ispirati alle tematiche del Computer Science Curriculum dell'ACM/IEEE (link): Concurrency, Scheduling and Dispatch; Event-Driven and Reactive Programming; Concurrency and Parallelism: Communication and Coordination, Distributed Systems; Mobile Platforms.
Comprendere i problemi e le metodologie necessarie allo sviluppo di programmi concorrenti ed asincroni attraverso lo studio dei principi di cooperazione e sincronizzazione tra processi con memoria condivisa e tra processi distribuiti. Esercitazioni in laboratorio sull'uso di librerie per concorrenza e distribuzione in diversi linguaggi/piattaforme.
Tradizionale: Lezioni in classe ed esercitazioni guidate in laboratorio.
Teoria Problema della sezione critica Algoritmi di mutua esclusione Lock-free programming (compare and swap, test and set lock) Lock, semafori, monitor Multihreading e librerie per la concorrenza Strutture dati concorrenti Programmazione ad eventi in Java/Swing Programmazione di rete (ServerSocket e Remote Method Invocation) Transazioni Processi in Android Introduzioni ai sistemi distribuiti e algoritmi di base Laboratorio Programmazione concorrente, distribuita ed ad eventi in C e Java Progetto finale
Ricevimento: Orario di ricevimento: Me 14-15
GIORGIO DELZANNO (Presidente)
GIOVANNI CHIOLA
MARINA RIBAUDO
PROGRAMMAZIONE CONCORRENTE E ALGORITMI DISTRIBUITI
Prova scritta + Progetto finale + prova orale.