17628 - PROGRAMMAZIONE CONCORRENTE E DISTRIBUITA

Anno Accademico 2020/2021

  • 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, Statecharts, Activity Diagrams)

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
- 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 ad attori basata su framework Akka (Java o Scala)

4 - Dalla Programmazione Concorrente alla Programmazione Distribuita

- introduzione - concetti e aspetti principali
- panoramica algoritmi distribuiti

In Lab:
- programmazione distribuita ad attori basata su framework Akka (Java o Scala)

5 - Ingegneria di Sistemi Software Distribuiti - Alcuni aspetti

- modelli, infrastrutture e middleware per lo scambio di messaggi (MOM)
-- confronto con modelli basati su RPC
- modelli e architetture distribuite orientate ai servizi e ad eventi
-- architettura REST, Web come piattaforma applicativa, visione API
- architetture a micro-servizi e alcuni pattern di riferimento
- design e sviluppo di applicazioni Cloud (introduzione)

In Lab:
- esempi pratici relativi a MOM, RPC (usando Java RMI), piattaforme e strumenti per architetture a servizi REST e REST API, Cloud PAAS

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://elearning-cds.unibo.it/course/view.php?id=12038

Orario di ricevimento

Consulta il sito web di Alessandro Ricci