COURSE OUTLINE
Session 1
Introduction to the Course
Course syllabus, logistics, grading. Introduction to the concurrency and
the parallelism. Hardware support. Real-world environments that exhibit parallelism
Session 2
Multithreaded Programming in Java
Basic primitives; challenges and issues; threading in Java; synchronisation primitives
Session 3
Basic Patterns and Techniques
Data/work-parallelism; load balancing and distribution; synchronisation and communication
Session 4
Higher-level Abstractions
Executors and futures; structure and composability
Session 5
Practical Session & Laboratories
Exercises in the multithreaded programming
Session 7
Practical Session & Laboratories
Exercises on the performance analysis
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
Different kinds of locks;
Different properties of the R/W operations; equivalence and expressiveness
Session 10
Consensus
The definition of consensus; implementation; universality of the consensus
Session 11
Practical Session & Laboratories
Exercises in the wait-free computing
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
Introduction to the Distributed Computing
The model; happens-before relation; clocks and ordering; communication; registers and consensus in the distributed setting
Session 14
Failures and their Effects
Failure models; Paxos algorithm and its importance; FLP in the distributed setting; fault tolerance in practice
Session 15
Practical Session & Laboratories
Exercises in the distributed computing