Teacher:
Camilo Rueda.
Credits: 3
Requirements: Basic knowledge of programming languages, algorithms, data structures and logic.
Time: Saturday, 9:00-12:00 AM
This course exposes students to the great challenge industry is facing:
how to take advantage of the increasingly concurrent nature of computation.
Multi-core machines are here and they will probably be used in most computing contexts.
the construction of concurrent software has to be dealt with properly.
This course explores ways in which this can be achieved
To provide a solid and practical knowledge about the challenge of constructing concurrent applications.
To get familiar with different types of concurrency.
To explore different concurrency strategies and assertain their merits
To practice on concurrent software construction using Oz
To reason about the correctness of concurrent programs
To explore models for implementing distributed applications.
The strategy of the course is to present each concurrency concept together with their associated models and techniques. Models are formalized as extensions of the Oz kernel language. Concrete applications are constructed using this extension.
Declarative Computation Model
Thinking “functionally”
Procedural abstraction and recursion
Lazy evaluation and higher order programming
Languages: ML, Haskell
Applications
Declarative Concurrency: data-driven concurrency
Multithreaded programming
Streams
Synchronizing by single-assignment variables
Process synchronization
Applications
Message Passing Concurrency
Asynchronous concurrency
The notion of “port”
Concurrent agents
Languages: Erlang
Applications
Share State Concurrency
Programming with locks
Implementing locks
High level abstractions: monitors and transactions
Lenguages: concurrent Java, Scoop
Applications
Reasoning about concurrency
Model checking: Spin
Process calculus: CSP
Distributed Programming
Distribution of data
Distribution of state
Distributed programming with patterns
Distributed protocols
Fault tolerance
Applications
Peter Van Roy and Seif Haridi. Concepts, Techniques, and Models of Computer Programming
J. Armstrong, R. Virding, C. Wikström, M. Williams. Concurrent Programming in Erlang. Prentice-Hall
S. Marlow Parallel and Concurrent Programming in Haskell. O'Reilly
G.J. Holzmann The SPIN Model Checker: Primer and Reference Manual
A. Roscoe. Theory and Practice of Concurrency. Prentice-Hall
Andrew S. Tanenbaum and Maarten van Steen. Distributed Systems: Principles and Paradigms