17628 - Concurrent and Distributed Programming

Academic Year 2021/2022

  • Teaching Mode: Traditional lectures
  • Campus: Cesena
  • Corso: Second cycle degree programme (LM) in Computer Science and Engineering (cod. 8614)

Learning outcomes

The course introduces the principles, methods and techniques concerning concurrent and distributed programming involved in modern software development. Upon completing this course, a student will have a solid conceptual and practical knowledge about:
- the spectrum of concurrent programming: multi-threaded programming, task-oriented modeling and design, message-based communication models, actor-based programming, asynchronous and reactive programming
- from concurrent to distributed programming: distributed algorithms, service-oriented computing.

Course contents

The course is organized in the following main parts:

* Concurrent programming - base concepts and models
- introduction - main concepts and aspects
- modelling a concurrent program/system
-- specifying liveness and safety properties in LTL
-- verifying properties with model-checking - pragmatics
- design and development of concurrent programs
-- methods, architectures
- interaction models and mechanisms
-- shared memory
--- semaphores, monitors
In lab:
- multi-threaded programming in Java
-- basic mechanisms and libraries
-- implementing monitors in Java
- verification of concurrent programs in JPF and TLA+

* Task-oriented design and development
- task-oriented patterns and architectures for the design and development of concurrent programs
- visual formalism - Petri Nets, Statecharts, Activity Diagrams
In lab:
- framework task-oriented in Java - Executors

* Concurrent programming - advanced
- message passing
-- channels, actors
-- asynchronous and synchronous
- asynchronous programming
-- based on future/task
-- based on Continuation Passing style (CPS): events and event-loop
--- promise mechanism
- reactive programming e reactive extension (Rx)
In lab:
- programming actors with Akka framework
- asynchronous programming in JavaScript
- Reactive Programming in RxJava

* From Concurrent to Distributed Programming
- introduction - main concepts and aspects
- Distributed algorithms
- distributed programming with actors
- service-oriented computing and cloud computing
In lab:
- programming service-oriented applications based on REST Web Services, Java RMI

Readings/Bibliography

- 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

Teaching methods

Three credits (about 30 hours) are devoted to theory and exercises in the classroom and three credits (about 30 hours) to practice in the lab.

Assessment methods


The final assessment is composed by due parts:
- a set of programming assignments/projects, assigned during the course
- oral discussion, with questions about the theory and the assignments/projects

Teaching tools

- slides projected during the lectures, available on the course web site
- scientific papers and articles, available on the Internet

Links to further information

https://elearning-cds.unibo.it/course/view.php?id=12038

Office hours

See the website of Alessandro Ricci