React 中的任务与队列
一句话结论:React 调度分两层——宿主调度(Scheduler 的 taskQueue/timerQueue)负责“什么时候跑”,React 自己的 Fiber/Lane 体系负责“跑什么、跑到哪”。
1. Scheduler 这一层(更靠近浏览器)
- timerQueue:未来某时刻才可执行的任务(按 startTime)
- taskQueue:已就绪任务(按 expirationTime/priority)
- 循环执行:跑一段就检查
shouldYield(),必要时把剩余任务留到下一轮
2. React 这一层(更靠近更新语义)
- Root 维护:
pendingLanes/suspendedLanes/pingedLanes等位图状态 - Fiber 维护:更新队列(Update Queue)、effect flags 等
- workLoop:把更新变成 Fiber 树上的工作单元(beginWork/completeWork)
3. 关键理解
- “一个更新”不等于“一个 Scheduler 任务”
- 可能是:多个更新合并成一次调度;也可能一次调度里处理多个 lanes