Allowing two processes that are executing together to communicate (share memory, send messages )with eachother. Used for:
- Information sharing
- Computation speedup. Split a task into subtasks
- Modularity. Build the system into modules
- Convenience. User can delete a task without larger effect