并行编程

1. 并发与并行的区别

  • 并发是多个任务抢占相同的CPU(不同时);
  • 并行系统同时运行多个任务在不同的CPU上;

2. 并行编程内的交流

两种:共享状态(信号量等)和消息传递

  • 共享状态:多个并行任务共享一个变量
  • 消息传递:尽管内存使用率高,但消息传递杜绝了并行获取共享变量的情况

3. 并行编程的问题

死锁 deadlock

死锁是多个进程等待某个条件释放它们的任务,但是这种条件永远不会发生。

饥饿 starvation

因为在处理进程优先级时的不合理排序,可能导致某些进程永远不能被执行。

竞争条件 race conditions

并行程序存在不确定性,即你不能确定哪个进程先执行,哪个进程先结束。不确定性导致如果程序里缺少某些同步机制,竞争条件便会发生。

并行程序要求某些步骤一定要是原子的。假设我们有一个过程:

  1. 读余额
  2. 加20元
  3. 写新余额

如果不把这三步定义为原子的,多进程并行这段代码时很可能发生错误。

4. 设计并行算法

数据分解

将数据分为独立的多部分,然后并行处理每个部分

使用pipline分解任务

pipline的每一个阶段都有自己的可以以并行方式运行的workers。然而,每个阶段的workers之间需要实现数据交换。如下图:

这里写图片描述

分解任务啊的时候要注意:

  1. 识别独立的任务;
  2. 识别任务之间的数据交换;


Ref:

《Parallel Programming with Python》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值