You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

并发与并行的形式化解析及核心概念专业问询

并发与并行的形式化解释及核心概念澄清

一、并发与并行的数学化定义

串行执行

串行执行的操作轨迹是一个全序集:对于任意两个操作$a$和$b$,要么$a$严格先于$b$执行,要么$b$严格先于$a$执行,不存在无法确定顺序的操作对。形式化表示为:执行集合$S = {o_1, o_2, ..., o_n}$,其中$\forall i<j$,$o_i \prec o_j$($\prec$代表“先于执行”的关系)。

并发执行

并发执行的操作轨迹是一个偏序集:存在至少一对操作$a$和$b$,既不满足$a \prec b$,也不满足$b \prec a$——这对操作无强制先后顺序,可被调度器任意安排执行顺序,甚至交替执行。核心特征是调度灵活性:独立操作的执行顺序不受全序约束。

并行执行

并行是并发的一个真子集,指操作在物理时间上存在重叠。形式化来说,存在操作$a$和$b$,满足$start(a) < end(b)$且$start(b) < end(a)$(两者的时间区间相交)。

注意:并发不需要依赖物理并行(比如单CPU通过时间分片实现的任务交替,无时间重叠但仍符合并发的偏序定义),但并行必然属于并发。

二、核心术语的明确解释

需求(Requirement)

  • 并发需求:系统需要支持无强制先后顺序的操作调度能力,核心是满足“独立任务可交替执行”,不关注物理资源是否并行。例如:服务器同时处理多个无依赖的客户端请求,就是典型的并发需求。
  • 并行需求:系统需要支持物理时间上的操作重叠执行,核心是利用多硬件资源(多核、多设备)提升执行效率,属于性能导向的需求。例如:对大型数组的独立元素同时进行计算,就是并行需求。

保证(Guarantee)

指模型或系统对执行轨迹的约束承诺:

  • 串行调度保证:系统承诺所有操作严格按全序执行,任一时刻仅一个操作运行。这种保证的约束性最强,但灵活性为零。
  • 并发调度保证:系统承诺允许偏序的执行轨迹,即独立操作可不受固定顺序约束。

“强/弱”的双重含义

这里的“强/弱”需从两个维度区分:

  1. 能力范围维度:“并发是强于串行的调度保证”——并发模型允许的执行轨迹集合完全包含串行模型的轨迹集合(串行是并发的一种特例:所有操作被强制安排为全序)。因此并发能支持更多调度可能性,从“可实现的行为范围”来说是更强的。
  2. 约束强度维度:“并发模型不够具限制性”——并发模型对执行轨迹的约束更少,允许的行为更多,开发者需要处理更多潜在的执行情况(如竞态条件)。这里的“不够具限制性”指约束强度弱,和前者的“强于串行”并不矛盾,只是描述角度不同。

三、基于形式化定义构建案例

纯并发案例(无物理并行)

设计两个独立任务:任务A打印数字1-5,任务B打印字母a-e。只要两个任务的操作之间无先后约束,任何交替执行的轨迹(如1→a→2→b、a→b→1→2、a→1→b→2等)都符合并发要求。即使在单CPU上通过时间分片实现,无物理时间重叠,依然属于并发。

并行案例(并发的子集)

同样是任务A和B,部署在双核CPU上:任务A在核心1执行,任务B在核心2执行。此时两个任务的打印操作会出现物理时间重叠(如核心1打印1的同时,核心2打印a),这就是并行执行,完全符合并发的偏序定义。

非并发(串行)案例

设计任务C:必须先打印完数字1-5,再打印字母a-e。所有操作严格按全序执行,无任何操作可交替,这就是串行执行,不属于并发范畴。

内容的提问来源于stack exchange,提问作者Enlico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:42:47