Skip to content

线程模型

React Native 渲染器将渲染管道的工作分配给多个线程。

在这里,我们定义了线程模型并提供了一些示例来说明渲染管道的线程使用情况。

React Native 渲染器被设计为线程安全的。 通过在框架内部使用不可变的数据结构(由 C++“const 正确性”特性强制执行),可以保证高级别的线程安全。 这意味着 React 中的每次更新都会在渲染器中创建或克隆新对象,而不是更新数据结构。 这允许框架向 React 公开线程安全和同步的 API。

渲染器使用三个不同的线程:

让我们回顾一下每个阶段支持的执行场景:

image-20220715164637383

渲染场景#

在后台线程中渲染#

这是最常见的场景,大多数渲染管道发生在JavaScript和后台线程上。

image-20220715164656967

在 UI 线程中渲染#

当 UI 线程上有高优先级事件时,渲染器能够在 UI 线程上同步执行所有的渲染管道。

image-20220715164711532

默认或连续事件中断#

这个场景显示了渲染阶段被 UI 线程中的低优先级事件中断。 React 和 React Native 渲染器能够中断渲染阶段并将其状态与在 UI 线程上执行的低优先级事件合并。 在这种情况下,渲染进程继续在后台线程中执行。

image-20220715164726985

离散事件中断#

渲染阶段是可中断的。 这个场景显示了渲染阶段被 UI 线程中的高优先级事件中断。 React 和渲染器能够中断渲染阶段并将其状态与在 UI 线程上执行的高优先级事件合并。 渲染阶段在 UI 线程上同步执行。

image-20220715164742326

后台线程从 JavaScript 批量更新#

在后台线程向 UI 线程发送更新之前,它会检查是否有来自 JavaScript 的更新。 这样,当渲染器知道有新状态进入时,它就不会渲染陈旧状态。

image-20220715164756808

C++ 状态更新#

源自 UI 线程的更新并跳过渲染阶段。 有关更多详细信息,请参阅 React Native 渲染器状态更新。

image-20220715164812445