DAG: Directed Acyclic Graph 有向无环图
一句话 DAG = Directed Acyclic Graph,中文常叫有向无环图。它是一种图:边有方向,且沿着方向走永远走不回起点。 先说「图」 图(Graph)由两类东西组成: 节点(Node / Vertex):事物本身,比如「编译模块 A」「跑测试」「部署」 边(Edge):节点之间的关系,比如「A 完成后才能做 B」 边如果没有方向(A—B 和 B—A 一样),叫无向图;边有方向(A → B 表示从 A 到 B),叫有向图(Directed Graph)。 Directed:边有方向 在任务依赖、数据流水线里,方向通常表示「先后」或「依赖」: 写接口 ──► 写单测 ──► 跑 pytest 意思是:写接口完成之后才能写单测;单测就绪之后才能跑 pytest。反过来走没有意义——不能「先跑 pytest 再写接口」。 Acyclic:不能有环 「无环」是说:沿着箭头走,不会绕回已经走过的节点。 有环的例子(这不是 DAG): A ──► B ▲ │ └─────┘ A 等 B,B 又等 A,两边永远等不到对方。包管理里的循环依赖、构建系统里的互相引用,本质都是环带来的死锁。 无环的例子(这是 DAG): ┌──► B ──► D A ───┤ └──► C ──► E 从 A 出发可以走到 B、C、D、E,但没有任何一条路径能回到 A。因此一定存在至少一个「没有入边的起点」,以及至少一个「没有出边的终点」。 ...