线程模型
注意
本文档引用了新架构,该架构正在积极推广中。
React Native 渲染器将渲染流水线的工作分布在多个线程上。
在此,我们定义了线程模型,并提供了一些示例来说明渲染流水线如何使用线程。
React Native 渲染器被设计为线程安全的。在高层面上,线程安全性是通过在框架内部使用不可变数据结构来保证的(由 C++ 的“const 正确性”特性强制执行)。这意味着渲染器中的每一次更新都会创建或克隆新对象,而不是更新现有的数据结构。这使得框架能够向 React 暴露线程安全且同步的 API。
渲染器使用两个不同的线程:
- UI 线程(通常称为主线程):唯一能够操作宿主视图(host views)的线程。
- JavaScript 线程:这是执行 React 渲染阶段以及布局计算的地方。
让我们回顾一下每个阶段支持的执行场景。

渲染场景
在 JS 线程中渲染
这是最常见的场景,大部分渲染流水线都在 JavaScript 线程上执行。

在 UI 线程中渲染
当 UI 线程上出现高优先级事件时,渲染器能够在 UI 线程上同步执行整个渲染流水线。

默认或连续事件中断
此场景展示了渲染阶段被 UI 线程上的低优先级事件中断的情况。React 和 React Native 渲染器能够中断渲染阶段,并将渲染状态与在 UI 线程上执行的低优先级事件合并。在这种情况下,渲染过程将继续在 JS 线程中执行。

离散事件中断
渲染阶段是可中断的。此场景展示了渲染阶段被 UI 线程上的高优先级事件中断的情况。React 和渲染器能够中断渲染阶段,并将渲染状态与在 UI 线程上执行的高优先级事件合并。此时渲染阶段会在 UI 线程上同步执行。

C++ 状态更新
更新源于 UI 线程,并跳过渲染阶段。详情请参阅 React Native 渲染器状态更新。
