C8644 - CONCURRENT SYSTEMS

Academic Year 2026/2027

  • Teaching Mode: In-person learning (entirely or partially)
  • Campus: Cesena
  • Corso: Second cycle degree programme (LM) in Computer Science and Engineering (cod. 6699)

    Also valid for Second cycle degree programme (LM) in Computer Science and Engineering (cod. 6699)

Learning outcomes

The course introduces the principles, methods and techniques concerning design and development of concurrent software systems. Upon completing this course, a student will know: - how to model the execution of a concurrent software system and how to specify and verify properties - how to design concurrent software systems, in particular the main architectures and methods - how to program concurrent software systems, adopting different concurrent programming techniques and paradigms: multi-threaded programming, asynchronous and reactive programming, task-oriented programming, message-based communication models, actor-based programming - how to program concurrent distributed systems: distributed algorithms, distributed-object computing, service-oriented computing.

Course contents

1) Concurrent systems - basic concepts and models
- introduction - main concepts and aspects
- modelling a concurrent system
-- specifying liveness and safety properties in LTL
-- verifying properties with model-checking - pragmatics
- visual formalism - Petri Nets, Statecharts, Activity Diagrams

2) Concurrent Programming based on multi-threading
- design and development of concurrent programs
-- methods, architectures
- interaction models and mechanisms
-- shared memory
--- semaphores, monitors
- From threads to tasks
-- handling asynchronous results - future mechanism
In lab:
- multi-threaded programming in Java
-- basic mechanisms and libraries
-- implementing monitors in Java
- task-oriented framework in Java - Executors

3) Asynchronous programming models and techniques
- async programming based on events and event-loop architecture
-- mechanisms and design styles (Continuation Passing style (CPS), promises, asynch/await)
- async programming based on Reactive Programming
-- reactive extensions (Rx)
In lab:
- asynchronous programming in JavaScript/Nodejs and Vertx
- Reactive Programming in RxJava

4) Concurrent programming based on message-passing
- message passing models
-- based on channels, synchronous and asynchronous
-- actor model
In lab:
- channel-based message-passing in the Go language
- actor-based programming based on Apache Pekko framework

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

Half of the course is devoted to theory and activities in the classroom and half to practice and lab activities.

Remark: In order to properly attend lab activities, students are requested to complete UNIBO modules about security in learning environment (module 1 and module 2), in e-learning modality.



Assessment methods

The assessment is an oral exam, in which we will discuss the topics of the course, starting from the material (code + documentation) developed and delivered by the student.

The material consists either (alternatively) in:

  • The solution to three practical assignments, assigned during the course. These assignments are meant to be done during the course, but this is not mandatory. They can be done in groups, from 1 to 3 members (exceptions are possible). They should be delivered 2 days before the date planned for the oral exam.
  • The development of a single project. The project can be proposed by the student (possibly refined, by the teacher), or can be chosen from a set proposed by the teacher at the beginning of the course.

The oral exam is individual, even when the material has been developed in group.

The evaluation (assessment) takes into account:

  • the level of understanding of the course topics, of main concepts and techniques;
  • the quality of the material delivered, including correctness and completeness;
  • the capability to describe and discuss the material, from the general idea to the details.

Teaching tools

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

Office hours

See the website of Alessandro Ricci