17628 - Concurrent and Distributed Programming

Academic Year 2019/2020

  • 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:
- multi-threaded programming, task-oriented modeling and design, message-based communication models, actor-based programming, asynchronous and reactive programming
- service-oriented models and architectures, middleware and infrastructures for distributed message-based systems, message-based and enterprise integration patterns, distributed algorithms.

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

* 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
- service-oriented models, architectures
- message-oriented infrastructures, middleware
- Message-based e Enterprise integration pattern
- Distributed algorithms

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