在运行共享内存系统时,会启动一个单独的进程,然后派生出多个线程。所以我们讨论共享内存系统时,我们指的是正在执行任务的线程。
另一方面,当我们运行分布式内存系统时,我们使用的是多个处理器,所有我们指的是执行任务的进程。
共享内存
在共享内存程序中,变量可以是共享的,也可以是私有的。
线程之间应该怎样通信?
---->线程之间通过共享变量进行通信-通信是隐式的。
动态线程
-主线程等待工作派生新线程,当线程完成时,它们终止
-高效使用资源,但线程的创建和终止是耗时的。
静态线程
创建并分配工作的线程池,但在清除之前不终止
性能更好,但可能会浪费系统资源。
非确定性,由于同时对某个共享变量进行操作导致的。---->使用互斥锁或者忙等待,信号量等方式对临界区进行处理。
并行程序设计
Foster方法
(1)划分
(2)通信
(3)凝聚或聚合
(4)分配