本期检索说明

先读取 content/collections/deep-radar 截至 2026-10-02 的全部原文链接,并按 URL、标题与实现机制去重。最近 24 小时找到两项同时给出实测、完整源码差异与原理链路的新材料:Tokio 为实验性 sharded spawn_blocking 队列加入持久游标和每分片八任务预算;Kotlin/Wasm 把 Double.ulp 从递归、nextUp 分支改为 IEEE 754 位模式计算。Java、Rust、Zig 与 Linux 的新候选没有同时满足三条证据红线,本期不凑数。

Kotlin 在 9 月 24 日“其它你可能关心的”中出现过 Native 目标的前身 PR #8364,但当时缺少公开 benchmark,且没有作为入选文章展开。本期是新的 Wasm 实现 PR #8643,并由独立 benchmark 仓库 PR #28 给出 WasmEdge、Wasmtime 与 JS 对照;来源、目标后端和实验数据均为新增,不把旧条目重复包装成新文章。两项主 PR 截稿时都仍开放评审,本文评价的是公开 patch 与实验,不把它们写成已发布能力。

主题 原始发布日期 一手来源与交叉验证 截稿状态 推荐强度
Tokio sharded blocking queue 有界轮转 2026-10-02 17:18(中原标准时间) Tokio PR #8532 / issue #8527 复现 / 完整 runtime patch / 四组回归测试 开放评审,尚未合入 强烈推荐,重点看公平性上界与局部性成本
Kotlin/Wasm Double.ulp 位级快路径 2026-10-02 20:32(中原标准时间) Kotlin PR #8643 / stdlib patch / kotlin-wasm-benchmarks PR #28 开放评审,尚未合入 强烈推荐,重点看 IEEE 754 特判与跨引擎结果

01 · Rust/Tokio:固定扫描起点把分片变成了饥饿优先级

原文与日期: KurodaKayn,2026-10-02 17:18(中原标准时间);Tokio PR #8532、完整源码 patch 与 问题复现 #8527。

为什么值得读: sharded queue 的目标是减少多生产者争用,但旧 worker 每执行完一个任务,都从 worker_thread_id % 16 指定的固定分片重新扫描。只要靠前的热分片持续补货,后面的冷分片即使早已入队也可能一直等;总吞吐看起来正常,p99 和分片间公平性却已经失控。这是一个很有迁移价值的提醒:减少锁竞争时,扫描顺序本身会成为隐式优先级。

核心技术结论: 修复为每个 blocking worker 保存 PopCursor { next_shard, remaining },初始预算为八个任务。worker 仍一次只 pop、运行一个任务,以保留队列深度统计和现有执行路径;但从同一分片取满八个后,游标推进到下一分片。非空位图先按游标旋转,再用 trailing_zeros 跳过空分片,所以公平性不是靠逐个锁遍历换来的。

Rust
const TASKS_PER_SHARD: usize = 8;

let mut mask = self.non_empty_mask
    .load(Ordering::Relaxed)
    .rotate_right(cursor.next_shard as u32);
let index = (cursor.next_shard + mask.trailing_zeros() as usize) % NUM_SHARDS;

cursor.remaining -= 1;
if cursor.remaining == 0 {
    cursor.next_shard = (index + 1) % NUM_SHARDS;
    cursor.remaining = TASKS_PER_SHARD;
}

最有价值的实验、源码与 benchmark 细节: 原始问题在 Ryzen 5 5600H、Tokio commit e133b6f 上提交 4,400 个任务;每个任务忙等约 500 微秒,到达速率约为单 worker 容量的 110%。默认队列四次 p99 为 200–218 ms,旧 sharded queue 为 1,732–1,805 ms,吞吐却都约 1,982–1,998 jobs/s。随机分片计数相当均匀,但一次实测中 shard 0 中位等待仅 0.242 ms,shard 15 为 1,259 ms;两秒时 shard 15 的 277 个任务仍全部积压。

最初“每个任务都轮转”的修复把 1/2/4 worker 的 p99 从 1887.5/1807.3/1950.1 ms 降至 400.1/691.6/333.1 ms,但单生产者近空任务吞吐中位数慢 5.7%。最终八任务批量原型的 p99 为 299/320/275 ms,相对旧队列分别下降约 84.2%、82.3%、85.9%;这组 p99 是三次原型实验,不应写成稳定置信区间。

最终源码又做了 36 次交错单生产者测试:原版 1.896 M jobs/s、逐任务轮转 1.789 M、八任务批量 1.871 M,最终方案只比原版低 1.3%。独立 12 次测试中,16 个生产者吞吐高 4.2%,64 个生产者高 28.2%。作者明确说“八”是工程折中而非证明出的最优值;在两个活跃分片的回归测试里,冷任务最多等待一批八个热任务,这才是补丁真正建立的可验证上界。

四个测试分别覆盖:热分片不断补货时冷分片仍在首批内运行、worker idle/wakeup 后游标不丢、分片内 FIFO 不变、跨空分片轮转。这里最值得移植的不是常量 8,而是把“公平性”写成确定的顺序断言,再用吞吐实验选择预算。

适合的工程师背景: 熟悉 Tokio runtime、工作窃取/分片队列、尾延迟,或正在用 sharding 降低锁竞争却发现少数租户/队列饿死的系统工程师。

预计阅读收益: 约 35–50 分钟;能学到如何从“吞吐没变”继续追到分片级等待时间,如何以持久游标和有界批量同时保留局部性与公平性,以及如何用负向单生产者 benchmark 约束方案。

02 · Kotlin/Wasm:Double.ulp 可以直接从指数与相邻位模式得到

原文与日期: Nikolay Kasyanov,2026-10-02 20:32(中原标准时间);Kotlin PR #8643、完整 stdlib patch 与 独立 benchmark PR #28。

为什么值得读: 旧 Wasm 实现先对负数递归,再分别判断 NaN、正无穷和 Double.MAX_VALUE,普通值则计算 nextUp() - this。语义直观,却重复做浮点分类与相邻值路径。新实现把问题还原为 IEEE 754 binary64:绝对值的位模式已经同时包含指数、尾数和特殊值分类,普通有限值的下一 representable value 就是 bits + 1。

核心技术结论: 先取 magnitude = abs(this),清掉符号带来的双分支。若 bits shr 52 != 0x7ffL,值是有限数:Double.MAX_VALUE 单独返回位模式 0x7ca0_0000_0000_0000L(即 (2^{971})),其余用 Double.fromBits(bits + 1) - magnitude。指数全 1 时直接返回 magnitude,因此 NaN 保持 NaN,正负无穷都得到正无穷。±0、次正规数也自然由相邻位模式覆盖。

Kotlin
val magnitude = abs(this)
val bits = magnitude.toRawBits()
return if (bits shr 52 != 0x7ffL) {
    if (bits == 0x7fef_ffff_ffff_ffffL)
        Double.fromBits(0x7ca0_0000_0000_0000L)
    else
        Double.fromBits(bits + 1) - magnitude
} else {
    magnitude
}

最有价值的实验、源码与 benchmark 细节: benchmark 不是只喂常见正数:normal 数组用 1 + index * 73 % 2046 遍历全部正常指数,并用奇数乘数构造不同的 52 位 fraction,符号正负交替;mixed 数组每八个值插入一次 ±0、最小/最大值、±∞ 和 NaN。每次 benchmark 遍历数组,把每个 ulp 的 raw bits 累加进 Blackhole,避免结果被消除。

WasmEdge 的 wasmWasi mixed/normal/combined 为 3.78×/3.64×/3.71×,wasmJs 为 2.17×/2.16×/2.17×;Wasmtime 的 wasmWasi 为 3.74×/3.49×/3.61×,wasmJs 为 1.52×/1.59×/1.55×。这说明位级快路径在两个 Wasm 引擎、两种 Wasm 目标上方向一致。

反例必须保留:同一实现若应用到 JS,WasmEdge 配套环境下 mixed/normal/combined 只有 0.81×/0.52×/0.65×,最坏即慢约 48%;Wasmtime 配套环境下为 0.94×/1.06×/1.00×。PR 因此只改 libraries/stdlib/wasm,没有拿 Wasm 的胜利替 JS 做决定。这是后端专用优化应有的证据边界。

适合的工程师背景: 熟悉 IEEE 754、Kotlin stdlib expect/actual、Wasm lowering,或要在多后端标准库中权衡“语义清晰实现”与“目标专用位级快路径”的编译器工程师。

预计阅读收益: 约 25–40 分钟;能学到如何用位模式一次完成绝对值、特殊值分类与相邻浮点数计算,如何设计覆盖全部指数与特殊值的 microbenchmark,以及为何跨后端数据必须阻止错误复用。

中国大陆 ToC 硬件价格观察

数据口径

窗口为 2026-09-04 至 2026-10-03,单位人民币,六类硬件固定同一 SKU。今天通过公开比价页的实时渲染结果复核到 CPU、GPU、主板、HDD、SSD 五类报价;DRAM 页面仍明确显示“暂无报价”,因此不新增点。重复价格作为真实采样保留,用来区分“已复核横盘”和“未取得数据”。SSD 只采用当前 2TB 规格的全网比价栏,不采用跨容量聚合的“¥819 起”。

中国大陆六类 PC 硬件公开价格事件

类别 10 月 3 日可复核价 30 日窗口内真实走势 建议
CPU Ryzen 7 9800X3D,京东 ¥2,694 9/4 ¥2,597.15 → 9/9 ¥2,449 → 9/30 ¥2,679 → 10/1 ¥2,699 → 10/2–3 ¥2,694 观望;连续两天横盘,仍比窗口低点高约 10.0%
GPU MSI RTX 5070 VENTUS 3X 12G,亚马逊中国 ¥4,464.34 9/7–10/3 多次实时复核均为 ¥4,464.34 刚需可比价后入手;单一渠道横盘不等于全市场没有促销
主板 ASUS TUF B850M-PLUS WIFI7,天猫 ¥1,299 9/4–10/3 多次复核均为 ¥1,299 刚需可入;公开最低价稳定,但下单前核对店铺与售后
DRAM 暂无报价;最后可复核 9/9 ¥3,900 9/5 ¥3,860 → 9/6–9/9 ¥3,900 观望;固定 SKU 缺价,不用其他容量、颗粒或时序替代
HDD IronWolf Pro 8TB ST8000NE001,i百联 ¥1,849 9/4–10/3 多次复核均为 ¥1,849 容量刚需可买;先核对型号、五年保修与数据恢复服务
SSD ZHITAI Ti600 2TB,京东 ¥1,799 9/23–10/3 多次复核均为 ¥1,799 观望或确认结算价后入手;2TB 比价横盘,聚合栏可能滞后

价格来源: 9800X3D、MSI RTX 5070 VENTUS 3X、ASUS TUF B850M-PLUS WIFI7、Kingston FURY DDR5-6000 32GB、IronWolf Pro 8TB、ZHITAI Ti600 2TB。

判断依据

六类固定 SKU 今天都没有出现可确认的变价:CPU 仍为 ¥2,694,GPU、主板、HDD 与 SSD 延续横盘,DRAM 继续缺价。CPU 从 9 月 9 日低点 ¥2,449 升到 ¥2,694,累计反弹约 10.0%,最近两天的稳定不足以证明回落趋势。GPU 等四类只是同一公开渠道再次复核相同最低价,不能外推为整个中国零售市场稳定。SSD 页面头部显示跨容量聚合的“¥819 起”,但 2TB 当前规格的全网比价仍为 ¥1,799,两种口径不能混用。本期购买建议只依据可复核价格序列,不引用未核实的新品或产能传闻。

其它你可能关心的

本期结论

两篇材料都在修复“抽象正确、代价却落在错误层级”的问题。Tokio 的分片降低了锁争用,却让固定扫描起点变成隐式优先级;持久游标和八任务预算把冷分片等待变成可测试的有限上界,同时把单生产者吞吐代价从逐任务轮转的 5.7% 收敛到 1.3%。Kotlin/Wasm 则绕过通用浮点辅助路径,直接从 IEEE 754 位模式得到 ULP,在 Wasm 上取得 1.52×–3.78×,但用 JS 回退证明这不是跨后端通用答案。可迁移的方法是:把公平性或数值特判写进数据结构本身,再用最不利负载和负向后端数据校准优化边界。