COURSE OUTLINE

Session 1

Introduction to the Course

Course syllabus, logistics, grading. Introduction to the concurrency and parallelism. Hardware support. Real-world environments that exhibit parallelism

Session 2

Multithreaded Programming in Java (1)

Threads, interrupts and concurrency effects

Session 3

Multithreaded Programming in Java (2)

Locks, Conditional Variables and synchronization issues

Session 4

Basic Patterns and Techniques

Data/work-parallelism; load balancing and distribution; synchronisation and communication

Session 5

Higher-level Abstractions

Executors and Futures

Session 7

Practical Session & Laboratories

Session 8

Foundations of the Shared Memory Computing

The model; causality; linearizability; lock-free & wait-free computing; fairness; safety and liveness properties

Session 9

Locks & Registers (1)

Different kinds of locks;
Different properties of the R/W operations; equivalence and expressiveness

Session 10

Locks & Registers (2)

Different kinds of locks;
Different properties of the R/W operations; equivalence and expressiveness

Session 11

Consensus

The definition of consensus; implementation; universality of the consensus

Session 12

Impossibility Results

Consensus numbers; FLP theorem; implications for the real-world applications

Session 6

Performance of the Multithreaded Programs

Common pitfalls; tooling to investigate performance issues;  basics of systems performance

Session 13

Practical Session & Laboratories

Session 14

Introduction to the Distributed Computing

The model; happens-before relation; clocks and ordering; communication; registers and consensus in the distributed setting

Session 15

Failures and their Effects

Failure models; Paxos algorithm and its importance; FLP in the distributed setting; fault tolerance in practice