并发专业术语定义
- 动作序列:一系列可能与决策分支点相关的动作,其中动作的执行顺序已经完全确定。
- 到达模式:开始并发单元的事件如何到达,可能是定期或不定期。
- 并发:动作序列同时执行。
- 并发单元:在同一个执行线程中顺序执行的一组动作,也称为任务或线程。
- 最后期限:一个动作或动作序列的完成成为不准确或不相关的时间点。
- 间隔时间:对于非周期性的任务间的开始时间间隔。
- 抖动:周期性任务期限周围的变化。
- 伪并发:通过每次执行单个任务来进行多个任务的执行,并且根据某些调度策略在任务间转换焦点。
- 竞争条件:一种计算情况,其中结果依赖于行动执行的顺序,但顺序本质上是不可知的。
- 及时性:任务可以预见在他的最后期限前完成的能力,或者满足其与时间相关的性能需求的能力。
下图显示了动作、动作序列和任务间的关系,每个任务(并发单元)由一组以特定序列执行的动作组成。这些动作序列彼此之间独立执行,也就是说在任务内部,动作执行的顺序是可知的,如图中任务1。而任务间的动作执行顺序是未知的,如果需要知道并关心他们间的执行顺序,那么就不该选择使用并发。
任务间执行顺序中唯一要关心的一点是同步点,如上图中横线所示。第一条横线叫做连接,它将来自不同任务的一组动作连接到逻辑上的单一线程中;第二条横线叫做分支,它将逻辑上的单一线程分成多个。直到所有的前驱动作(这里指Action E, Action Z, and Action Gamma)都完成,这种以使用连接和分支的语义流程才能通过同步点。一旦三个动作都完成,才能进行后续的动作。同步点通常是任务点共享数据或确保进一步执行前的先决条件都满足时使用。
任务通信有两种基本方法:
- 同步通信,类似于打电话,即双方在同一时间进行调用服务和数据交换,发送者“发送等待”(发送阻塞)等待响应,同步通信经常通过函数调用实现。
- 异步通信,类似于明信片,发送者“发送并忘记”(无发送阻塞)。之后,接收者获取和处理消息或数据,即使接收者不能即使处理数据,发送者也不需要等待。
为了任务能够并发执行,任务必须在多核CPU的不同核上执行。在一个给定的CPU核内部,多任务使用伪并发的方式执行,即在一个瞬间只有一个任务在执行,但是处理器通过在就绪的任务之间切换来提供并发的效果。
任务的基本结构取决于调用它们的调度模式。循环执行的任务仅是一些顺序的代码,当它完成时返回。在协作多任务环境中运行的任务通常在循环中运行,而它自愿放弃控制权给调度器来允许其他任务运行。如下代码显示了一个典型的循环执行,首先系统启动后定义全局初始