Concurrent programming is an essential skill for a modern computing professional, because the world is concurrent, because computer systems include multiple physical entities, because modern computing environments include distributed components (on multiple, different computers), and because of the rise of multicore processors whose individual cores are no longer getting exponentially faster.
This course poses the questions:
- How can we write concurrent programs, i. e., programs in which parts of the program can run in any order or simultaneously (in parallel)?
- What programming model(s)/abstractions support effective concurrent programming?
Specifically, by taking this course, a student will:
- Understand what concurrency is, how it arises, and why concurrent programming is difficult.
- Understand the implemetation basis of concurrent programs.
- Develop and understand solutions to practical and classical synchronization problems.
- Become competent in at least two different models of concurrent
programming. This term, we'll do:
- Conventional, shared-memory threads programming.
- Actor-style message-passing programming.
- Will complete an in-depth, substantial, team project investigating an application of concurrency or a programming model of concurrency of their choosing.
- Gain experience presenting material in a group setting. Every student will present something to the class at least twice during the semester.
Prerequisite: Comp 15, spirit of adventure, sense of humor.