This document discusses parallel programming models and their key aspects. It describes five common parallel programming models: shared-variable, message-passing, data parallel, object-oriented, and functional/logic. The main types of inter-process communication are shared variables and message passing. Synchronous and asynchronous message passing are introduced. The document also covers language features that enable parallel programming such as optimization, availability, synchronization/communication, control of parallelism, data parallelism, and process management.