Salta al contenuto principale della pagina

PROGRAMMAZIONE CONCORRENTE E ALGORITMI DISTRIBUITI

CODICE 80302
ANNO ACCADEMICO 2021/2022
CFU
  • 6 cfu al 3° anno di 8759 INFORMATICA (L-31) - GENOVA
  • SETTORE SCIENTIFICO DISCIPLINARE INF/01
    LINGUA Italiano
    SEDE
  • GENOVA
  • PERIODO 2° Semestre
    MATERIALE DIDATTICO AULAWEB

    PRESENTAZIONE

    Introduzione alla programmazione multithreaded, concorrente, ad eventi e distribuita.

    Nel corso vengono introdotti concetti di base legati ad architetture multicore, multithreading nei sistemi operativi e nella programmazione  algoritmi ed architetture di base per sistemi  distribuiti.

    Il corso ha una parte di teoria in classe e una serie di laboratori (Sonic Pi, Pthread, Java Concorrente) e puntatori ad altri framework (Kotlin, Java per Android, C++,...).

    OBIETTIVI E CONTENUTI

    OBIETTIVI FORMATIVI

    Comprendere i problemi e le metodologie necessarie allo sviluppo di programmi concorrenti e asincroni attraverso lo studio dei principi di comunicazione e sincronizzazione tra processi con memoria condivisa e tra processi distribuiti su linguaggi e piattaforme differenti.

    OBIETTIVI FORMATIVI (DETTAGLIO) E RISULTATI DI APPRENDIMENTO

    Le lezioni di teoria sono mirate ad acquisire conoscenza sulle problematiche della programmazione concorrente che richiede conoscenza di aspetti di architetture, sistemi operativi e software e degli algoritmi distribuiti.

    La parte di teoria inoltre mostra diversi livelli di astrazione a livello di costrutti di programmazione attraverso il passaggio da libreri a basso livello in C a libreria ad alto livello in Java e linguaggi simili (Android, Kotlin).

    I laboratori sono mirati a costruire passo per passo un middleware distribuito con possibile accesso concorrente a strutture dati delle singole componenti. Il sistema risultante si può adattare per costruire un layer applicativo multiutente (es gioco multiplayer, remote controller, tracking, architetture pub/sub, ecc)

    PREREQUISITI

    Programmazione
    Linguaggio Java
    Sistemi Operativi 
    Concetti di Base di Reti di Calcolatori

    MODALITA' DIDATTICHE

    Lezioni frontali di teoria
    Esercitazioni in classe
    Esercitazioni di laboratorio mirate alla costruzione incrementale di un server multithread con consegne delle soluzioni durante l'anno
     

    PROGRAMMA/CONTENUTO

    Concorrenza nel SO & MultiThreading
    Introduzione alla Programmazione Concorrente
    Introduzione alla concorrenza con esperienza di live coding
    Introduzione pratica alla concorrenza
    - Schemi di sincronizzazione lock-free (con attenzione a problemi legati ad architetture con relaxed memory)
    - Librerie di sincronizzazione standard come mutex e barriere
    Memory models e Consistenza Sequenziale
    Pthread, semafori, monitor e barriere di sincronizzazione
    Concurrent Java
    -Thread come Oggetti, Primitive di base di sincronizzazione
    -Librerie High Level Concurrency
    -Introduzione a Eclipse e Debugging di Thread con Eclipse
    -Thread e Sincronizzazione in Java
    -Monitor e Semafori
    -Produttore e consumatore at work: crivello concorrente

    Metodologie e pattern in Concurrent Java

    GUI, Eventi e Concorrenza
    -Swing, Javafx e Concorrenza
    -Async Task in Java for Android
    -Async Task in Kotlin

    Introduzione ad Algoritmi Distribuiti
    Distributed Programming in Java
    -Connection Pool con Caching delle Connessioni
    -Server e Client con Socket Java
     

    TESTI/BIBLIOGRAFIA

    Lucidi e note del docente messe a disposizione su Aulaweb
    Materiale online (documentazione Java, Android, Kotlin)

    S.Crafa, Oggetti, Concorrenza, Distribuzione. Programmare a diversi livelli di astrazione. Esculapio.

    M. Herlihy and N. Shavit. The Art of Multiprocessing Programming. MK

     

    DOCENTI E COMMISSIONI

    Commissione d'esame

    GIORGIO DELZANNO (Presidente)

    ANGELO FERRANDO

    LEZIONI

    INIZIO LEZIONI

    Febbraio 2021

    Orari delle lezioni

    L'orario di tutti gli insegnamenti è consultabile su EasyAcademy.

    ESAMI

    MODALITA' D'ESAME

    L'esame consiste in un quiz online con 10 domande aperte e  2 chiuse e una presentazione (in presenza o remoto) dei laboratori consegnati durante l'anno

    MODALITA' DI ACCERTAMENTO

    La validazione dei quiz sarà automatica per le domande chiuse e guidata dai docenti per domande aperte e laboratori.
    Tale validazione è mirata a valutare l'apprendimento da parte dello studente di concetti e strumenti descritti nel corso.

    Calendario appelli

    Data Ora Luogo Tipologia Note
    21/06/2022 09:00 GENOVA Scritto 4 giugno aule 506+505
    20/07/2022 09:00 GENOVA Scritto 4 giugno aule 506+505
    01/09/2022 09:00 GENOVA Scritto 4 giugno aule 506+505
    31/01/2023 09:00 GENOVA Scritto 4 giugno aule 506+505
    17/02/2023 09:00 GENOVA Scritto 4 giugno aule 506+505