QuickJS-ng项目中ThreadSanitizer支持的技术实现与挑战
ThreadSanitizer(TSan)是一种用于检测多线程程序中数据竞争的工具,能够帮助开发者发现并发编程中的潜在问题。在QuickJS-ng项目中,开发者尝试为其添加TSan支持时遇到了一些技术挑战,这些挑战主要围绕JavaScript原子操作的实现方式。
问题背景
在QuickJS-ng中实现TSan支持时,开发者发现TSan对项目中JS原子操作的实现方式提出了警告。具体表现为TSan检测到在js_atomics_op函数中出现了数据竞争情况:主线程执行原子写操作的同时,另一个线程正在执行读取操作。
TSan的警告信息特别指出,这种数据竞争发生在共享内存区域,并且提到了"通过sleep同步"的潜在问题。虽然这种警告可能是一个假阳性,但它确实揭示了项目中混合使用原子操作和互斥锁的实现方式。
技术分析
QuickJS-ng中的原子操作实现存在以下特点:
- 使用
js_mutex_t类型的全局互斥锁js_atomics_mutex来保护原子操作 - 通过
js_once_t确保原子操作系统的单次初始化 - 使用链表结构管理等待原子操作的线程
TSan的警告主要集中在js_atomics_op和js_atomics_wait函数之间的交互上。前者执行原子写操作,后者执行非原子读操作,这种混合访问模式触发了TSan的数据竞争检测。
解决方案探索
开发者尝试了几种解决方案:
-
互斥锁同步方案:在
js_agent_sleep函数中添加对js_atomics_mutex的获取和释放操作。虽然这看起来像是一个简单的同步点,但实际测试表明它能有效消除TSan的警告,且对性能影响可以接受。 -
构建系统调整:考虑通过CMake构建系统有条件地暴露互斥锁符号,但发现由于静态链接的特性,这种方法不可行。
-
配置简化:计划移除
CONFIG_AGENT定义,简化构建配置,因为非代理构建已经无法正常工作。
性能考量
在实际测试中,添加TSan支持后:
- 完整测试套件执行时间显著增加(超过1小时墙钟时间)
- 仅测试Atomics.wait功能也需要约8秒
- 使用快速配置后,测试时间可降至约42秒(在M1 Max处理器上)
这种性能开销使得TSan不适合作为常规CI测试的一部分,但可以考虑像Valgrind一样,仅在主分支推送时运行。
实现建议
基于上述分析,建议的最终实现方案包括:
- 在原子操作相关函数中添加必要的同步点
- 移除不再使用的
CONFIG_AGENT定义 - 将TSan测试作为选择性测试项,而非默认CI流程
- 在代码中添加适当的注释,说明TSan相关的特殊处理
结论
为QuickJS-ng添加TSan支持虽然面临挑战,但通过合理的同步机制和构建调整是可以实现的。这种支持对于检测并发编程错误非常有价值,特别是在处理SharedArrayBuffer和Atomics等高级JavaScript特性时。考虑到性能开销,建议将其作为可选的高级测试工具,而非默认构建选项。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00