共享内存,可以理解为多个CPU连接在一个内存上,内存上的数据供所有CPU访问和修改。与之对应的概念是分布式内存编程,详见我之前的博客《我的并行计算之路(一)Ubuntu 16.04下的MPI安装》。共享内存相对于分布式内存编程哟个很大的好处是数据是共享的,即所有的CPU都可以访问的到。而不是像分布式内存编程那样,当需要数据交互时,得通过进程通信来完成《我的并行计算之路(二)MPI点对点通信》、《我的并行计算之路(三)MPI集合通信》和《我的并行计算之路(四)MPI集合通信》。此外共享内存和分布式内存编程还有一个很大的不同,就是分布式内存运行的是进程,而共享内存运行的是线程。
线程可以理解为“轻量级的进程”。进程是一个可拥有资源的独立单位又是一个可以独立调度和分派的单位,因此其才成为一个能独立运行的基本单位。然而,成也萧何,败也萧何,也正是进程又拥有资源又可以被独立调度和分派,因此操作系统在进程切换的时候需要花费大量的时间和空间开销,不仅需要保存和设置寄存器内容,还需要涉及存储器管理方面的工作。因此,若能将进程的两个属性分开,由操作系统分开处理,程序的并发性会更好。亦即,对于作为调度和分派的基本单位ÿ