Module exec_graph

Module exec_graph 

Source
Expand description

异步执行 静态有向无环图 的执行节点 执行节点有3种,system执行节点,原型执行节点, 单例执行节点 内部维护了图的节点向量和边向量 执行节点采用pi_append_vec存放, 边也采用pi_append_vec 执行图本身支持动态添加原型执行节点及创建相应的边, 可线程安全的放入新节点和边,并线程安全的连接from和to的边 如果有A对X写和Y读,则创建Y–>A和A–>X的边 如果有A和B都会对X写,写不能并行,而A在B前面先写,则创建A–>B的边, 这样B就会等待A执行后再执行

在检查边和添加边是有时间间隔的,为了保证这个过程不会有改变,添加原型节点时需要锁住,保证不会同时添加2个原型节点。 图执行时,是无锁的。执行时要遍历to边,添加时要修改to边,同时为了保证from_count被正确减少,要求执行或添加必须串行,因此通过节点状态来互相等待。 图执行时,会根据节点状态等待添加节点完成,添加节点时也会根据节点状态等待节点执行完成,为了防止死锁,要求system.align方法必须不会调用添加原型节点,并尽快完成。

Structs§

Edge
边。from在0位, to在1位。ShareU64里,低32位是节点的索引。高32位是下一个edge的索引。
EdgeIndex
ExecGraph
ExecSystem
GraphInner
NGraph
NGraphNode
图节点
NeighborIter
Node
NodeIndex

Enums§

Direction
Edge direction.
NodeType