目录文档-技术白皮书07-EFT.WP.Core.Threads v1.0

附录A 接口参考与原型


I. 统一约定与类型别名

  1. 命名与计时
    • 时钟:运行时一律使用 tau_mono;审计字段使用 ts。
    • 时间单位默认秒(浮点)并采用 SI 前缀;参数名以 *_ms 表示毫秒。
    • 取消使用 cancel_token;若未显式传入,则默认可被 cancel(thr, reason, token=None) 外部打断。
  2. 线程安全与并发语义
    • ChanRef 为 mpmc(multi-producer, multi-consumer)除非 mode 明示为 spsc/mpsc/spmc。
    • 所有 Ref 类型为不可变句柄;资源生命周期由创建方负责释放或交由 GC/RAII。
  3. 错误分类(统一)
    E_TIMEOUT、E_CANCELED、E_RATE_LIMIT、E_BACKPRESSURE、E_CAP_EXCEEDED、E_QUOTA、E_CONTRACT、E_DEDUP、E_INVALID_STATE。
  4. 类型别名
    • ThrRef、GraphRef、ChanRef、LimiterRef、SpanRef、Ticket、Result、Policy、RetryPolicy。
    • Duration=float、Timestamp=float、ResourceSet=dict[str, any]、Tags=dict[str,str|int|float]、Tests=list[dict]。
  5. 到达时两口径(跨卷锚点)
    • 常量外提:T_arr = ( 1 / c_ref ) * ( ∫ n_eff d ell )。
    • 一般口径:T_arr = ( ∫ ( n_eff / c_ref ) d ell )。
    • 口径差:delta_form = | ( 1 / c_ref ) * ( ∫ n_eff d ell ) - ( ∫ ( n_eff / c_ref ) d ell ) |。

II. 返回值与状态约定


III. I70-1 线程与任务

  1. spawn(fn:any, args:tuple=(), name:str|None=None, policy:dict|None=None) -> ThrRef
    • 参数:policy={"daemon":bool,"prio":int,"affinity":[int]}。
    • 语义:创建可取消的执行单元 thr,初始 state="ready"。
    • 错误:E_QUOTA、E_INVALID_STATE。
    • 指标:threads.spawn.count、threads.running.gauge。
  2. join(thr:ThrRef, timeout:float|None=None) -> any
    • 语义:等待至 state in {"done","canceled"};超时抛 E_TIMEOUT。
    • 指标:threads.join.latency_ms{quantile}。
  3. cancel(thr:ThrRef, reason:str, token:any|None=None) -> bool
    • 语义:幂等;返回是否成功置为 state="canceled"。
    • 错误:E_INVALID_STATE(已终止)。
  4. set_affinity(thr:ThrRef, affinity:list[int]) -> None
    语义:更新 CPU 亲和性;可能触发抢占。
  5. set_priority(thr:ThrRef, prio:int) -> None
    语义:调整调度优先级;范围由实现定义。

IV. I70-2 调度与执行图

  1. build_graph(spec:dict) -> GraphRef
    • 关键字段:spec={"nodes":[str],"edges":[[u,v]],"cost":{"w":dict,"c":dict}}。
    • 约束:G 必为 DAG;若检测环,抛 E_INVALID_STATE。
    • 指标:graph.nodes.count、graph.edges.count。
  2. run_graph(G:GraphRef, inputs:any, opts:dict) -> Result
    • opts={"max_parallel":int,"timeout":Duration,"trace":bool}。
    • 语义:按拓扑执行;维护 hb;遵循配额与背压。
    • 错误:E_TIMEOUT、E_CONTRACT、E_QUOTA。
    • 指标:graph.t_make_ms{quantile}、graph.node.runtime_ms{name}。
  3. topo_sort(G:GraphRef) -> list
    语义:返回拓扑序;复杂度 O(|V|+|E|)。
  4. critical_path(G:GraphRef) -> list
    语义:返回 crit(G) 结点序列;用于估计 T_make(G)。

V. I70-3 消息通道与背压

  1. chan_open(name:str, cap:int, mode:str="mpmc") -> ChanRef
    • 语义:创建容量为 cap 的有界通道;溢出策略由背压策略决定。
    • 错误:E_CAP_EXCEEDED(非法容量)。
  2. chan_put(ch:ChanRef, msg:any, key:str|None=None, timeout:float|None=None) -> bool
    • 语义:在 timeout 内投递;若设置 key 则进入去重路径。
    • 错误:E_BACKPRESSURE、E_TIMEOUT、E_DEDUP。
    • 指标:chan.put.latency_ms、chan.q_len.gauge、chan.drop.count。
  3. chan_get(ch:ChanRef, max_batch:int=1, timeout:float|None=None) -> list
    • 语义:批量提取;若超时返回空列表或抛 E_TIMEOUT(实现可选)。
    • 指标:chan.get.batch_size、chan.get.latency_ms。
  4. set_backpressure(ch:ChanRef, strategy:dict) -> None
    • strategy={"type":"drop|block|shed|resize","alpha":float,"beta":float,"gamma":float}。
    • 语义:定义 bp = f(q_len, cap, W_q) 并驱动限速或丢弃。

VI. I70-4 超时、重试与幂等

  1. with_timeout(timeout:float) -> ctx
    • 语义:在上下文内对阻塞操作施加 timeout;继承至子调用。
    • 约束:timeout >= T_arr + J + P99(service)(参见第5章)。
  2. retry(policy:dict) -> callable
    • policy={"max":int,"backoff":"const|lin|exp","base":Duration,"jitter":"none|full"}。
    • 语义:可组合装饰器;遵循上界 W_retry <= timeout * (retries + 1) + J_total。
    • 指标:retry.attempts.count、retry.last_delay_ms。
  3. ensure_idempotent(fn:any, key_fn:any, window:float) -> any
    • 语义:以 idemp_key=key_fn(input) 做去重,窗口 Delta_t_dedup=window。
    • 错误:E_DEDUP(重复且不可合并)。

VII. I70-5 资源配额与隔离

  1. set_quota(scope:str, R:dict) -> None
    例:{"cpu":2,"mem":"1Gi","io":"100MBps"};作用域如 "batch"、"stream"。
  2. reserve(scope:str, R:dict) -> Ticket / release(ticket:Ticket) -> None
    • 语义:显式预留与释放;溢出抛 E_QUOTA。
    • 指标:quota.in_use.gauge{resource}、quota.reject.count。

VIII. I70-6 流量控制与限流

  1. rate_limiter(name:str, rps:float, burst:int) -> LimiterRef
    • 语义:令牌桶;发放速率 rps、桶深 burst。
    • 指标:rl.tokens.gauge、rl.block.count。
  2. limit_acquire(lim:LimiterRef, tokens:int=1, timeout:float|None=None) -> bool
    • 语义:在 timeout 内获取 tokens;失败抛 E_RATE_LIMIT 或返回 False。
    • 与背压协同:当 bp 升高时动态下调 rps。

IX. I70-7 可观测性与追踪


X. I70-8 契约与 SLO

  1. assert_thread_contract(G:GraphRef, tests:list[dict]) -> dict
    • 支持断言类型(常用):
      1. {"type":"rho_lt_1","chan":"name","lambda":"obs","mu":"obs"}。
      2. {"type":"deadline","expr":"T_make <= deadline"}。
      3. {"type":"arrival_form_consistency","tol_form_ms":float}。
      4. {"type":"ell_monotonic","field":"ell_seq","strict":true}。
      5. {"type":"timeout_floor","expr":"timeout >= T_arr + J + P99_service"}。
    • 返回:{"ok":bool,"failed":[{test,reason}]};失败抛 E_CONTRACT(可配置)。
  2. sli_slo_compute(SLI:dict, window:str) -> dict
    语义:按窗口计算 P50/P90/P99、ErrRate、预算消耗;输出 { "sli":dict, "budget_used":float }。

XI. I70-9 跨卷绑定

  1. bind_to_parameters(ds:any, params:list[str]) -> bool
    语义:将运行参数绑定到数据集字段(复用《Core.DataSpec》)。
  2. bind_to_equations(eqn_refs:list[str]) -> bool
    语义:注册所用方程编号以供审计与重放。
  3. enforce_arrival_time_convention(trace:any) -> None
    • 语义:对 gamma(ell) 与测度 d ell 进行两口径计算并校验 delta_form <= tol;失败抛 E_CONTRACT。
    • 指标:arrival.delta_form_ms{link}、arrival.calibrated.count。

XII. 策略对象与配置字段


XIII. 状态机与时序约束

  1. 线程状态机
    • state: "new" -> "ready" -> "running" -> ("blocked")* -> ("done"|"canceled")。
    • 约束:任何 join 必在 hb(spawn, join) 成立后发生;取消必须建立 hb(cancel, done|canceled)。
  2. 通道时序
    • hb(put_i, get_i) 对应消息同位次 i;批量 get 维持队内顺序。
    • 水位线与迟到(流处理)以 tau_mono 计算 wm 与 lateness。

XIV. 指标命名与标签规范

统一前缀与标签

XV. 复杂度与资源基线


XVI. 兼容性与弃用策略


XVII. 最小落地序列(速查)


XVIII. 错误到恢复映射(建议)


XIX. 跨卷引用与编号索引


版权与许可(CC BY 4.0)

版权声明:除另有说明外,《能量丝理论》(含文本、图表、插图、符号与公式)的著作权由作者(“屠广林”先生)享有。
许可方式:本作品采用 Creative Commons 署名 4.0 国际许可协议(CC BY 4.0)进行许可;在注明作者与来源的前提下,允许为商业或非商业目的进行复制、转载、节选、改编与再分发。
署名格式(建议):作者:“屠广林”;作品:《能量丝理论》;来源:energyfilament.org;许可证:CC BY 4.0。

首次发布: 2025-11-11|当前版本:v5.1
协议链接:https://creativecommons.org/licenses/by/4.0/