This course focuses on algorithms and techniques for developing parallel and distributed applications and their architectures and systems. Parallel computing on a single computer uses multiple processors to process tasks in parallel, whereas distributed parallel computing uses multiple computing devices to process those tasks. In this course, students will explore distributed consensus, the CAP theorem, logical time, multicast, mutex, garbage collection, snapshots, deadlock detection, web caching, resource looking up in the P2P system, blockchain, multiprocessor scheduling, and multiprocessor caching.