Many challenges arise during the design and implementation of concurrent and
distributed programs. The aim of this course is to understand those
challenges, and to see techniques for tackling them. The main paradigm to be
considered is message passing concurrency, where independent processes, with
private variables, interact by passing messages.
At the end of the course students are expected to understand:
- The conceptual foundations of concurrent programming, and
- A variety of effective ways of structuring concurrent and distributed programs.
Students should have an understanding of CSP, e.g. as taught in the Concurrency course. Students should also have a good understanding of Object Oriented Programming, e.g. as taught in the Michaelmas Term OOP course. Students who have learnt either CSP or OOP elsewhere should discuss their experience with the lecturer before taking this course.
The course will have a number of practicals, to allow students to gain experience with concurrent programming. These practicals will use Scala; background reading on the language will be suggested.
Reasons for concurrency; processes, threads; concurrent architectures; safety and liveness. Message passing concurrency; deadlock. Clients and servers. Interacting peers. Synchronous parallel computation. Patterns of concurrent programming: data parallel; bag of tasks; recursive parallel; task parallel. Low-level concurrency controls: monitors; semaphores.