Salta ai contenuti. | Salta alla navigazione

Strumenti personali

PROGRAMMAZIONE CONCORRENTE

Anno accademico e docente
Non hai trovato la Scheda dell'insegnamento riferita a un anno accademico precedente? Ecco come fare >>
English course description
Anno accademico
2021/2022
Docente
CESARE STEFANELLI
Crediti formativi
6
Periodo didattico
Primo Semestre
SSD
ING-INF/05

Obiettivi formativi

Il corso affronta il tema della programmazione concorrente, di fondamentale importanza per la realizzazione di applicazioni multithreaded che possano garantire elevate prestazioni sulle macchine multiprocessore (o multicore) e nei moderni sistemi distribuiti (come lo stesso Web).

Obiettivo principale del corso è indicare le metodologie e fornire gli strumenti di programmazione che permettano agli studenti di progettare e realizzare delle applicazioni concorrenti multithreaded corrette, quindi prive di interferenze e corse critiche.

Le principali conoscenze acquisite saranno:
- motivazioni alla base della programmazione concorrente;
- conoscenza dei principali costrutti della programmazione concorrente (semafori e monitor);
- conoscenza degli strumenti di programmazione concorrente nel linguaggio Java;
- conoscenza del linguaggio Ruby e del framework Rails.

Le principali abilità (cioè la capacità di applicare le conoscenze sopra descritte):
- analisi dei requisiti di un progetto software multithreaded per identificare le criticità ai fini di una corretta gestione della concorrenza;
- capacità di progettazione di sistemi software concorrenti;
- capacità di sviluppare applicazioni concorrenti e distribuite in vari linguaggi di programmazione.

Prerequisiti

Il corso richiede la conoscenza approfondita dei linguaggi C e Java.

Contenuti del corso

Il corso prevede 60 ore di didattica tra lezioni ed esercitazioni in laboratorio.

Introduzione alla programmazione concorrente (12 ore):
Motivazioni, definizioni, problematiche - Concorrenza e parallelismo - Modelli di processo ad ambiente globale e locale - Il problema della sincronizzazione dei processi in ambiente globale - I thread in Java.

I principali costrutti per la sincronizzazione dei processi (24 ore): semafori, regioni critiche e monitor - Esempi di applicazioni concorrenti: produttore/consumatore, lettori/scrittori, filosofi - Safety e liveness di un'applicazione concorrente - Il problema del deadlock.

La programmazione concorrente in Java (12 ore):
I costrutti di base del linguaggio - Le concurrency utilities - Progetto e sviluppo di applicazioni concorrenti multithreaded in Java.

La programmazione Ruby e Rails (12 ore):
Il linguaggio Ruby - Il framework Rails - Progetto e sviluppo di applicazioni.

Metodi didattici

Il corso è principalmente costituito da lezioni in aula. Alcune esercitazioni verranno svolte in laboratorio per aiutare gli studenti a familiarizzare con i framework di sviluppo.
Le lezioni sono video registrate e quindi caricate sul sito classroom.

Modalità di verifica dell'apprendimento

L'esame vuole verificare il livello di raggiungimento degli obiettivi formativi sopra indicati ed è costituito da una prova orale, nel corso della quale si verificherà la preparazione dello studente mediante:

- Risoluzione di un problema di programmazione concorrente da svolgere con i costrutti visti nel corso, i.e., Monitor e/o i costrutti Java.
- Verifica della preparazione sulla parte di teoria di programmazione concorrente.
- Verifica della capacità di programmazione Ruby e Rails.

Si prevedono appelli orali con frequenza settimanale. Per non interferire con le lezioni, durante i periodi di lezione saranno disponibili appelli riservati ai soli studenti fuori corso. Le date vengono inserite poco per volta, nel Servizio Web di iscrizione alle liste di esame (è obbligatorio iscriversi via Web). Scrivere al docente per avere ulteriori informazioni e appelli.

L'esame può anche essere sostenuto in lingua inglese.

Modalità di svolgimento dell'esame.
Gli esami saranno svolti in presenza. Solo nel caso di situazioni di emergenza Covid gli esami saranno svolti in remoto e in tale caso le modalità di esame saranno le seguenti: Lo studente dovrà avere uno smartphone (non un PC) per collegarsi con google meet. La telecamera dello smartphone dovrà inquadrare lo studente e la scrivania, quindi con una inquadratura non troppo da vicino. Utilizzare la telecamera frontale in modo che lo studente possa vedere il google meet e accorgersi di eventuali problemi di connessione. Il testo dell’esame verrà dettato a inizio prova. Lo studente scriverà la soluzione dell’esercizio su un foglio di carta. Al termine della prova, lo studente dovrà fotografare il testo (se chiede di usare una app che produca un unico file pdf) con lo smartphone e inviarlo via mail al prof. Stefanelli ( cesare.stefanelli@unife.it ). Il collegamento via smartphone con il google meet deve essere mantenuto per tutta la durata dell’esame, per dare ai docenti il modo di tenere sotto controllo lo svolgimento degli esami. Per aiutare gli studenti ad accorgersi di eventuali cadute di connessione, verrà predisposto un google form per raccogliere il numero di cellulare dei partecipanti, che così potranno essere immediatamente richiamati nel caso si perda la connessione. Dopo aver sostenuto la prova scritta, si potrà procedere alla parte orale, immediatamente a seguire.

Testi di riferimento

I principali testi di riferimento sono:

P. Ancilotti, M. Boari, Programmazione concorrente e distribuita, McGraw-Hill, 2007.
J. Magee, J. Kramer, Concurrency, State Models and Java programs, second edition, Wiley, 2006.
G. Andrews, Foundations of multithreaded, parallel, and distributed programming, Addison Wesley, 2000.
S. Oaks, H. Wong, Java Threads, third edition, O’Reilly, 2004.
D. Lea, Concurrent Programming in Java, Addison-Wesley, 1999.

La copia delle slide presentate a lezione saranno disponibili sul sito Classroom indicato nell'area materiale didattico di questo sito Web.