菜单

ZigGlobalObject 和事件循环

相关源文件

本文档介绍了 Bun 的核心运行时架构,重点关注 ZigGlobalObject 类和异步事件循环系统。 ZigGlobalObject 作为主要的 JavaScript 全局对象实现,充当 JavaScriptCore 与 Bun 的原生功能之间的桥梁,而事件循环则负责协调异步任务执行和微任务处理。

有关模块加载和解析的信息,请参阅 模块系统和加载。有关 JavaScript VM 生命周期和内存管理的详细信息,请参阅 JavaScript VM 生命周期

架构概述

ZigGlobalObject 和事件循环构成了 Bun 中 JavaScript 执行的核心运行时基础。 ZigGlobalObject 扩展了 WebCore 的全局对象功能,而事件循环负责管理异步操作。

高层系统架构

来源: src/bun.js/bindings/ZigGlobalObject.h93-327 src/bun.js/event_loop.zig1-47

ZigGlobalObject 实现

ZigGlobalObject 类(Zig::GlobalObject)是主要的全局对象实现,它扩展了 Bun::GlobalScope 并提供了 JavaScript 执行环境。

核心结构和职责

来源: src/bun.js/bindings/ZigGlobalObject.h93-180 src/bun.js/bindings/ZigGlobalObject.h408-650

关键方法和操作

ZigGlobalObject 为运行时操作提供了几个关键方法

方法目的位置
create()创建全局对象实例的工厂方法ZigGlobalObject.h143-146
moduleLoaderImportModule()处理 ES 模块导入ZigGlobalObject.h191
promiseRejectionTracker()跟踪未处理的 Promise 拒绝ZigGlobalObject.h198
scriptExecutionStatus()管理脚本执行状态ZigGlobalObject.h197
queueTask()将任务加入事件循环队列ZigGlobalObject.h170-172

来源: src/bun.js/bindings/ZigGlobalObject.h143-198

事件循环实现

事件循环是用 Zig 实现的,负责管理异步任务执行、微任务以及与底层 uSockets 事件循环的集成。

事件循环结构

来源: src/bun.js/event_loop.zig1-30 src/bun.js/event_loop.zig32-58

事件循环执行流程

来源: src/bun.js/event_loop.zig445-477 src/bun.js/event_loop.zig188-224

集成和任务处理

ZigGlobalObject 和事件循环通过几个关键机制进行集成

任务排队和执行

集成主要通过任务排队方法实现

来源: src/bun.js/bindings/ZigGlobalObject.h170-172 src/bun.js/event_loop.zig512-531

微任务处理

微任务处理通过 thenable 函数系统与 JSC 的微任务队列集成

组件职责实现
JSC__JSGlobalObject__drainMicrotasks()清空 JSC 微任务队列event_loop.zig114
deferred_tasks.run()处理 Bun 的延迟任务event_loop.zig117
vm.releaseWeakRefs()释放弱引用event_loop.zig113
resetOnEachMicrotaskTick()重置每个 tick 的状态ZigGlobalObject.cpp895-907

来源: src/bun.js/event_loop.zig110-123 src/bun.js/bindings/ZigGlobalObject.cpp895-907

Promise 集成

该系统通过 thenable 函数系统处理 Promise

来源: src/bun.js/bindings/ZigGlobalObject.h347-399 src/bun.js/bindings/bindings.cpp546-569

内存管理与垃圾回收

该系统通过几个机制与 JSC 的垃圾回收集成

GC 集成点

方法目的位置
visitChildren()标记 GC 可达对象ZigGlobalObject.h161
clearDOMGuardedObjects()清理DOM对象ZigGlobalObject.h185
processGCTimer()管理GC计时event_loop.zig441-443
performGC()触发垃圾回收event_loop.zig552-554

来源: src/bun.js/bindings/ZigGlobalObject.h161-185 src/bun.js/event_loop.zig441-443 src/bun.js/event_loop.zig552-554