There are two ways to think about parallel programming:
The first has to do with how parallel threads of a computation are allowed to communicate and/or share data.
The second has to do with how a programming task is divvied up to different processes, irrespective of how these communicate.
Suppose we have a computational situation where many processes and/or threads are running in parallel. There appear to be broadly four ways in which these threads can collaborate:
Each language may support one or more of the above models.
Please expand