- Docente: Alessandro Ricci
- Crediti formativi: 6
- SSD: ING-INF/05
- Lingua di insegnamento: Italiano
- Modalità didattica: Convenzionale - Lezioni in presenza
- Campus: Cesena
- Corso: Laurea Magistrale in Ingegneria e scienze informatiche (cod. 8614)
-
dal 19/02/2024 al 31/05/2024
Conoscenze e abilità da conseguire
Al termine del corso lo studente possiede conoscenze specialistiche sulla progettazione e lo sviluppo di sistemi e applicazioni concorrenti e distribuite. In particolare: - conosce le principali tecniche di modellazione e verifica di programmi/sistemi concorrenti e distribuiti; - conosce le principali architetture e pattern nella progettazione di sistemi concorrenti/distribuiti; - conosce i principali paradigmi e tecniche di programmazione concorrente, asincrona e distribuita; - sa applicare le tecniche di programmazione concorrente, asincrona e distribuita nel contesto delle tecnologie moderne di riferimento (linguaggi, piattaforme, middleware/infrastrutture)
Contenuti
Il corso si svolgerà nelle seguenti parti:
1 - Programmazione concorrente - modelli di base
- introduzione - concetti e aspetti principali
- modello a processi e memoria comune e programmazione multi-threaded
-- problema sezione critica
-- meccanismi e astrazioni di interazione di base: semafori, monitor
- analisi comportamento e specifica/verifica di proprietà di correttezza
- progettazione e sviluppo di programmi concorrenti
-- formalismi visuali - Reti di Petri
In Lab:
- programmazione multi-threaded in Java
-- meccanismi di base e supporti di libreria
-- implementazione di monitor in Java
2 - Modelli e Tecniche di programmazione asincrona
- Dai thread ai task - progettazione e techniche di programmazione task-oriented
- Programmazione asincrona basata su architetture ad eventi e CPS
-- architettura controllo event-loop, meccanismi: promise, async/await
- Programmazione reattiva
In Lab:
- Framework task-oriented in Java - Executors
- Java Virtual Threads
- programmazione ad attori basata su framework Akka (Java o Scala)
- programmazione asincrona in Vertx (Java) e Node (Javascript)
- programmazione reattiva in RxJava
3 - Modelli e Tecniche basate su scambio di messaggi
- modelli a scambio di messaggi
-- modello a canali, asincrono e sincrono
- modello ad attori
In Lab:
- programmazione a scambio di messaggi via canali usando linguaggio Go
- programmazione ad attori basata su framework Akka (Java o Scala)
4 - Dalla Programmazione Concorrente alla Programmazione Distribuita
- introduzione - concetti e aspetti principali
- panoramica algoritmi distribuiti
- richiami a distributed object computing
- introduzione ai middleware message-oriented
- cenni in merito a service-oriented computing e cloud computing
In Lab:
- programmazione distribuita ad attori basata su framework Akka (Java o Scala)
- programmazione di applicazioni distribuite usando message-oriented middleware (MOM) - RabbitMQ come caso di studio
- programmazione di applicazioni distribuite basate su distributed object computing come approccio - Java RMI come caso di studio
Testi/Bibliografia
- Principle of Concurrent and Distributed Programming (Ben-Ari) - Addison Wesley
- Java Concurrency in Practice - Brian Goetz, Doug Lea et al - Addison Wesley
- Foundations of Multithreaded, Parallel, and Distributed Programming - Gregory R. Andrews - Addison-Wesley
- Concurrency - State Models & Java Programs - Jeff Magee & Jeff Kramer - Wiley
Metodi didattici
Dei sei crediti del corso, tre crediti circa sono dedicati alla teoria e tre alla pratica in laboratorio.
Modalità di verifica e valutazione dell'apprendimento
La verifica dell'apprendimento avviene mediante:
- lo svolgimento di tre consegne relativamente a programmazione multi-threaded, programmazione asincrona e programmazione ad attori/distribuita. Le consegne consistono in mini-progetti da svolgere in autonomia in laboratorio/a casa, individualmente o in gruppo, durante il corso o a fine corso, a scelta dello studente.
- un colloquio orale, con domande sulla teoria e discussione delle consegne.
Strumenti a supporto della didattica
Durante le lezioni verranno proiettati lucidi, disponibili sul sito ufficiale del corso. A supporto delle attività pratiche, verrà utilizzato il laboratorio di informatica ove gli studenti troveranno gli strumenti necessari per svolgere le esercitazioni. Tutto il materiale è disponibile sul sito di riferimento del corso.
Link ad altre eventuali informazioni
https://virtuale.unibo.it/course/view.php?id=48302
Orario di ricevimento
Consulta il sito web di Alessandro Ricci