17628 - PROGRAMMAZIONE CONCORRENTE E DISTRIBUITA

Anno Accademico 2023/2024

  • 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)

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