Bun 提交了一个开放的 PR,将共享内存线程添加到 JavaScriptCore
共享堆线程支持的设计规范:堆服务器和每个线程分配器、共享虚拟机状态、TID/SW 标记和分段蝴蝶、在 N 个变异器下的 JIT 级别,以及线程/锁/条件/线程局部 API。包括 TSAN、竞态放大器和基准门文档,以及 THREAD.md 中的设计概述。…利用 --useThreads 把线程/锁/条件/线程局部和属性上的原子操作,通过虚拟机的 JSLock 进行序列化,作为即将到来的共享堆实现的语义 Oracle。包括 39 个测试集合,一个 TSAN 不使用 JIT 的构建目标(在空闲时无数据竞态,空抑制),一个随机化的 yield 竞态放大器,以及一个记录基线的串行性能基准门。同时修复了 WTF 中 ICU 静态归档链接顺序和两个已存在的无 JIT 构建中断。…当前的对象模型、JIT 支持和线程 API 多变异器堆,具有每个线程分配器和 N 线程安全点、进程全局分片原子表和结构 ID 分配锁定、每个线程的轻量级虚拟机执行状态、具有分段回退和 TTL 观察点省略的 TID/共享写入标记的蝴蝶、每个级别的 TID/SW 检查,在 FTL 和基于时代的 CodeBlock 回收中具有处理程序 ICs,以及在线程/锁/条件/线程局部 API 背后的真实变异器线程,带有对象属性上的原子操作。所有操作都在 --useJSThreads 背后,保持 GIL 作为 --useThreadGIL 备用层。…waiter 列表 六轮针对线程集合的门控修复:每个线程的 CLoop 栈替换共享堆栈帧剥离,LocalAllocator 和 Heap 共享模式竞态,退休的 JIT 产物会计,等待者列表和条件唤醒修复,LLInt 调用路径初始化为已生成线程,蝴蝶机制在慢路径中调度,以及在约 CodeBlock 中 JITData 泄漏的 flag-on 之前解除观察点。集合:81/85 通过;将每个测试超时添加到运行程序中,以便挂起报告为失败。…在已生成线程上,trySpreadFast 达到仅平面蝴蝶() 访问器,对其蝴蝶在同形添加风暴下进行了分段;分发路径现在根据机制调度,并回退到通用慢路径。从已生成线程调用的基线编译被调用者读取每个线程的 JIT 状态,而只有 LLInt 入口进行了初始化;线程入口序列现在为所有级别实体化。线程集合通过。…分发手册 SPEC-ungil.md:N-变异器执行模型——JSLock GIL-off 进入的令牌模式,每个线程的微任务/任务队列,具有保持存活的生命周期,停止世界的指挥协议(seq_cst 停止位/访问 Dekker 对),线程清理状态机(在简单注册表锁下为 TEARDOWN/COLLECTED/DETACHED),通过注册条件等待实现 ~VM 完成屏障,haveABadTime 4 级停止,延迟初始化拥有者重入合同,终止模型(仅限 VM 范围)。包括执行的库存审计(K4/N7)、完整的修订历史以及绑定附件,以及扁平化的 18 个任务的实施手册。工作流更新:ungil 实现运行 DAG 调度的并行任务波,具有不相交的文件所有权和每个任务的敌对审核;验证梯度覆盖 GIL-on 和标志关闭的回归臂;扫描器/模糊/CVE 审核工作流强化 id/path 消毒。没有源/变更落地(反驳者纪律保持)。证据包 SHAREDHEAP-ALLOC-EVIDENCE.md 是本轮的贡献:- 99.67% 的 7090 万个单元已经触发区间提升(Riptide 的新块路径中的提升)。补充为 0.33% 的分配 / ~4.1% 的墙。每个线程的新块缓存候选目标错误杠杆并带有 RSS 风险。- 可测量的每单元税是 3 跳分配器查找(allocationClientForCurrentThread -> allocatorForSizeStep -> allocateForClient,~250ms)。更高杠杆的零 RSS 候选:每个(线程、大小类)缓存 LocalAllocator*。- 分解:intcs W=1 +5889ms 缝隙 vs Java,仅 ~1912ms (33%) 是 sharedGCHeap+gilOff 税。~3937ms (67%) 是普通 JSC 底线 (WTF::equal Map-key compare, lockProtoFuncHold, rope-resolve, IC-miss, CellLock/DeferTermination/traps)。<6000ms 需要 BOTH; 仅分配器根本无法清除它。- intcs W=16 RSS 噪声模式相关(慢模式重 = 低 RSS 重).§41:清理树重新基线,所有在 ±3% 的 §40 以内,所有门绿灯,RSS 在 +10% 以内。… 36.5% 的税) H-VMLITE-TLCPTR:在 JIT 编译时,烘焙一个进程常量 TLC 插槽索引,并加载每个线程的 LocalAllocator* 轻量级相对 (VMLite::{tlcTable,tlcTableBound}) 而不是一个空的分配器常量。H-TLS-TABLE:将 C++ CompleteSubspace::allocate sharedGCHeap 臂合并为两个 IE-TLS 加载 + 一个索引加载。H-TLC-FIXEDTABLE-NOREALLOC:预增长 TLC 表以便缓存的指针永远不会过期。defer-hoist-lazyslow:在 gilOff 操作 CompileFTLLazySlowPath 稳态中提升 DeferGCForAWhile。GCClient::CompleteSubspaceView 基础设施(分阶段)。uprobe-verified:CompleteSubspace::allocateForClient 2780 万 -> 0 (3-hop 完全消除)。operationCompileFTLLazySlowPath 4660 万 -> 3640 万 (-22% 仅限 — stringSpace 为 iso 而不是 table-address)
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡