当稳定性提升性能时(线程)

发布: (2026年5月10日 GMT+8 01:33)
6 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的正文内容,我将为您翻译成简体中文并保持原有的格式。

TokenGate 概述

TokenGate 是一个基于 token 管理的并发系统。被装饰的函数返回 tokens 而不是立即执行。Tokens 通过包装的装饰器被接收,按权重类路由到每个核心的邮箱,并在线程池工作者上执行。

该系统将 async coordinationthreaded execution 分离:

  • 异步事件循环负责 token 的路由和协调。
  • 线程池负责实际执行。

权重分类与核心分配

每个任务被分配一个权重,用于决定它可以运行的核心范围:

权重核心范围
HEAVY所有核心
MEDIUMCore 2 +
LIGHTCore 3 +

在一个范围内,交错位置计数器会按 FIFO 顺序在工作线程之间分配令牌,允许交错的重试令牌。

粘性令牌

共享相同 (operation_type, args) 键的令牌会被 固定 在首次接收它们的核心上,以保持数据局部性。当令牌到达时,sticky_registry.mark() 会创建一个粘性锚点,自动将相关部分分组。

@task_token_guard(
    operation_type="my_op",
    tags={"weight": "medium", "sticky_anchor": "my_domain"},
)
def my_operation(n: int) -> int:
    ...

主动域锚定

第二层主动层在任何子令牌被路由之前,将整个调用链锚定到一个域。这确保所有相关数据在同一个核心上解释。

当主令牌被装饰为 external_calls 时,会生成一个 SHA‑256 种子:

seed = SHA256(token_id + ":" + freeze(external_calls))

64 字符的十六进制摘要将种子固定在主令牌落入的核心上。所有生成的子令牌继承该种子,从而在同一核心上执行。

@task_token_guard(
    operation_type="lead_op",
    tags={"weight": "medium", "external_calls": ["child_op"]},
)
def lead_operation(n: int) -> list:
    # Children inherit the seed and land on the same core
    return [child_op(n + i) for i in range(4)]

待处理的主操作计数在创建时因每个外部调用而递增,完成后递减。当计数降至零时,种子被释放。

性能结果

基准测试运行了 15 次加倍波,累计处理 131,068 个 token。下表显示了每波的每秒 token 数、平均延迟和重叠因子。

WaveTokensTok/sLat (ms)Overlap
141386.20.7211.44×
282391.20.4182.48×
3162744.80.3644.82×
4322812.70.35611.32×
5642880.00.34722.01×
61282907.60.34429.78×
72562846.80.35137.98×
85122811.50.35641.81×
910242813.90.35544.18×
1020482644.30.37844.86× (peak)
1140962816.30.35538.34×
1281922819.90.35532.64×
13163842765.00.36227.92× (sustained)
14327682707.70.36924.96×
15655362789.50.35824.21×

Zero failures. Average latency: 0.386 ms/token.

之前的路由方式在饱和后将重叠度限制在约 17×,受跨域流量的限制。域锚定消除了这种浪费:属于同一组的 token 会保持在一起,保持缓存行热度并降低跨核流量。因此,重叠上限提升,且即使重叠超过 20×,延迟仍保持平稳。

参与方式

如果您运行并发的 Python 工作负载——任务队列、异步流水线,或任何当前自由路由的相关操作系统——欢迎尝试 TokenGate 并分享您的观察。

  • 粘性注册表和哈希指挥者为可选功能;现有代码仍按常规路由。
  • 哈希域锚定和粘性令牌计划作为首批“生产就绪”特性。

感兴趣的场景

  • 没有明显原因的意外并发上限。
  • 数据局部性可能提升性能的高吞吐量流水线。

代码仓库是公开的,欢迎提交 issue 和观察报告:

GitHub repository


TokenGate 已累计近 4,000 小时的业余开发。随着项目向商业化方向推进,社区的反馈将不胜感激。

0 浏览
Back to Blog

相关文章

阅读更多 »

Bun 在 6 天内移植到 Rust

概览 - 测试覆盖率:在 Rust 重写版中,Bun 现有的测试套件在 Linux x64 glibc 上的通过率为 99.8%。 - 代码库基本保持不变,但 Ru...