Concurrency, Parallelism and Distributed Systems
This course aims at providing the foundations about computing as a collection of tasks that may be executing simultaneously and potentially interacting with each other. These tasks can be executed on a single or multiple processors or distributed across a network. The course presents the models, challenges, algorithms and systems focusing on three main aspects/modules: concurrency (multiple computations interacting with each other), parallelism (multiple cores or processors), and distribution (multiple computers across a network).
Following a set of introductory sessions, the course has three modules: concurrency, parallelism and distribution. The student has to select two of the three modules. The lectures are complemented with programming exercices to illustrate the problems and evaluate the solutions.