CPL: Channel-based Concurrency Module (29/10/2020 – 19/11/2020)


Channel-based concurrency enables concurrent programming at a higher-level of abstraction when compared to more traditional shared-memory concurrent programming practices, shifting the practice of concurrent programming towards composition of high-level coordination patterns among a variable number of concurrently executing agents, that collaborate and compete to achieve the overall system goal.

This module explores channel-based concurrent programming, instantiated in the Go programming language. The module explores the various standard channel-based programming idioms that can be found in Go such as synchronous and asynchronous communication channels, green threads (goroutines) and selective communication, with an emphasis on solid engineering practices (e.g. test-based development).

The module also introduces a range of higher-level concurrent programming patterns, achieved through systematic combination of the programming idioms above and other high-level patterns themselves such as: Pipelines, Worker Pools, Worker Trees and Cancellation, etc.

Students will have the chance to put all these concepts to use in a medium-sized group project.

Module Structure

The module consists of 4 lectures. The first lecture provides a brief introduction to the Go programming language and its channel-based concurrency features. The second lecture goes deeper into channel-based concurrency, exploring selective communication and the various kinds of small scale building blocks that can be achieved. The third lecture applies the concepts of the previous 2 lectures to construct high-level programming patterns in a problem driven way: Pipelines, worker pools and worker trees. The last lecture provides a brief introduction to selected programming language research topics applied to channel-based concurrency.


  • Lecture 1 - Introduction to Go and Channel-based Concurrency
  • Lecture 2 - Channel-based Concurrency Building Blocks
  • Lecture 3 - High-level Concurrent Programming Patterns
  • Lecture 4 - Applied Research Topics


The module has 2 lab assignments, one of which is graded and a final graded project that is to be completed during the last 2 weeks. Management of the assignments and turn-ins is automated through GitHub Classroom, which provides students with an individual or team-based repository with some starter code.

The lab assignments and project handouts (which reference the supplied code) can be found below: