- Docente: Alessandro Ricci
- Credits: 6
- SSD: ING-INF/05
- Language: Italian
- 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