This book introduces a process calculus for parallel, distributed and reactive systems. It describes the conceptual foundations as well as the mathematical theory behind a programming language, and a number of application examples. The chosen approach provides a framework for understanding the semantics of parallel and distributed systems. Moreover, it can be directly applied to practical problems.