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